python Tornado框架的使用示例


Posted in Python onOctober 19, 2020

Tornado是一个python的开源web框架,它比django要轻量级到多,也没有什么组件,只有运用到对应到业务场景下我才使用这个框架,它是单进程单线程到异步非阻塞模型,适用与长连接长轮巡,高并发,异步非阻塞

安装:

pip install tornado

View层

'''
@File    : views_service.py
@Copyright : rainbol
@Date    : 2020/8/31
@Desc    :
'''
import threading
import time
import tornado.web
import tornado
import tornado.ioloop
import tornado.web
import tornado.gen
from tornado.concurrent import run_on_executor
from concurrent.futures import ThreadPoolExecutor
from uuid import uuid4
import random

all_count = 0
big_list = {}


class ServiceHandler(tornado.web.RequestHandler):
  executor = ThreadPoolExecutor(20) # 最大线程数 必须定义一个executor的属性,然后run_on_executor装饰器才会有用。

  @run_on_executor # 在这个方法下,线程内运行;query函数被run_on_executor包裹(语法糖),将该函数的执行传递给线程池executor的线程执行,优化了处理耗时性任务,以致达到不阻塞主线程的效果。
  def time_demo(self, tid, uid):
    time.sleep(tid)
    threading_id = threading.current_thread().ident
    big_list[uid] = threading_id

  @tornado.gen.coroutine # 异步、协程处理;增加并发量
  def post(self):
    global all_count
    all_count += 1
    uid = str(uuid4())
    yield self.time_demo(random.randint(1, 100), uid) # 模拟业务处理,使用yield来实现异步阻塞请求
    r = {'status': 'True', '线程id': '%s' % big_list[uid], "count": all_count}

    self.write(tornado.escape.json_encode(r)) # 写入返回信息写入response
    self.finish() # 结束服务

  def get(self):
    return self.post()

__init__.py

'''
@File    : __init__.py
@Copyright : rainbol
@Date    : 2020/8/31
@Desc    :
'''
import tornado.web # web框架
import tornado.httpserver # http服务
import tornado.ioloop # 输入输出事件循环
import tornado.options # 配置工具
from tornado.options import options, define
from app.config import configs
from app.urls import urls
define('port', default=8000, type=int, help='运行端口')


# 自定义应用
class CustomApplication(tornado.web.Application):
  def __init__(self): # 重写构造方法
    # 指定路由规则
    handlers = urls
    # 指定配置文件
    settings = configs
    super(CustomApplication, self).__init__(handlers=handlers, **settings)


# 定义服务
def create_server():
  # 允许在命令行中启动
  #tornado.options.parse_command_line()
  # 创建http服务
  http_server = tornado.httpserver.HTTPServer(
    CustomApplication() # 注意要实例化
  )
  # 绑定监听的端口
  http_server.listen(options.port)
  # 启动输入输出事件循环
  tornado.ioloop.IOLoop.instance().start()
'''
@File    : manage.py
@Copyright : rainbol
@Date    : 2020/8/31
@Desc    :
'''
from app.views import create_server



if __name__ == '__main__':
  create_server()

路由

from app.views.views_index import IndexHandler as index
from app.views.views_service import ServiceHandler as service

# 配置路由和配置到映射规则

urls = [
  (r"/index", index),
  (r"/demo", service),
]

以上就是python Tornado框架的使用示例的详细内容,更多关于python Tornado框架的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中几种导入模块的方式总结
Apr 27 Python
对python3 urllib包与http包的使用详解
May 10 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
对numpy中向量式三目运算符详解
Oct 31 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
numpy中的ndarray方法和属性详解
May 27 Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 Python
Python中url标签使用知识点总结
Jan 16 Python
使用python的pyplot绘制函数实例
Feb 13 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
如何理解Python中的变量
Jun 01 Python
python如何实时获取tcpdump输出
Sep 16 Python
python mock测试的示例
Oct 19 #Python
python 提高开发效率的5个小技巧
Oct 19 #Python
python 利用toapi库自动生成api
Oct 19 #Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 #Python
python爬取音频下载的示例代码
Oct 19 #Python
Python爬虫教程知识点总结
Oct 19 #Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 #Python
You might like
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
JavaScript延迟加载
2021/03/09 Javascript
类似框架的js代码
2006/11/09 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
node.js通过url读取文件
2020/10/16 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
初步探究Python程序的执行原理
2015/04/11 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python文件选择对话框的操作方法
2019/06/27 Python
详解python 中in 的 用法
2019/12/12 Python
python实现人机五子棋
2020/03/25 Python
Python爬虫教程知识点总结
2020/10/19 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
小学生班会演讲稿
2014/01/09 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
英语课外活动总结
2014/08/27 职场文书
先进个人总结范文
2015/02/15 职场文书
小学入学感言
2015/08/01 职场文书