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处理PHP数组文本文件实例
Sep 18 Python
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
Python assert关键字原理及实例解析
Dec 13 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
django实现HttpResponse返回json数据为中文
Mar 27 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
django项目中使用云片网发送短信验证码的实现
Jan 19 Python
Python简易开发之制作计算器
Apr 28 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 IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
xml和web特殊字符
2009/04/28 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
深入理解python try异常处理机制
2016/06/01 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
安踏官方商城:anta.cn
2019/12/16 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
小学生元旦感言
2014/02/26 职场文书
二年级小学生评语
2014/04/21 职场文书
校园演讲稿汇总
2014/05/21 职场文书
2014年超市工作总结
2014/11/19 职场文书
公积金接收函格式
2015/01/30 职场文书
超市主管竞聘书
2015/09/15 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
Java 数组的使用
2022/05/11 Java/Android