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字符串转换成浮点数函数分享
Jul 24 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
Django开发的简易留言板案例详解
Dec 04 Python
python requests使用socks5的例子
Jul 25 Python
Python编程中类与类的关系详解
Aug 08 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
python opencv肤色检测的实现示例
Dec 21 Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 08 Python
教你如何使用Python实现二叉树结构及三种遍历
Jun 18 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
改进的IP计数器
2006/10/09 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
js实现登录验证码
2016/12/22 Javascript
浅谈javascript中的 “ && ” 和 “ || ”
2017/02/02 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
用Python进行TCP网络编程的教程
2015/04/29 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
Servlet如何得到客户端机器的信息
2014/10/17 面试题
数学教学随笔感言
2014/02/17 职场文书
五四青年节演讲稿
2014/05/26 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
护士医德医风心得体会
2016/01/25 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电
python中redis包操作数据库的教程
2022/04/19 Python