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的汉字转GBK码实现代码
Feb 19 Python
python基于右递归解决八皇后问题的方法
May 25 Python
Python heapq使用详解及实例代码
Jan 25 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
python判断完全平方数的方法
Nov 13 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
用python的turtle模块实现给女票画个小心心
Nov 23 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
如何在django中添加日志功能
Feb 06 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
Python使用永中文档转换服务
May 06 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判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
JS实现时间格式化的方式汇总
2013/10/16 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
python多线程用法实例详解
2015/01/15 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Python中logging.NullHandler 的使用教程
2018/11/29 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Python timeit模块的使用实践
2020/01/13 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
.NET现在共支持多少种语言
2014/02/26 面试题
七年级英语教学反思
2014/01/15 职场文书
校园环保建议书
2014/05/14 职场文书
维修工先进事迹
2014/05/29 职场文书
医学专业自荐信
2014/06/14 职场文书
民族精神月活动总结
2014/08/28 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
小学生家长意见
2015/06/03 职场文书
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL
Windows server 2016服务器基本设置
2022/08/14 Servers
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL