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开发windows GUI程序入门实例
Oct 23 Python
python将ip地址转换成整数的方法
Mar 17 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
python简单贪吃蛇开发
Jan 28 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
Python类的动态绑定实现原理
Mar 21 Python
Python可视化神器pyecharts绘制水球图
Jul 07 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中的字符串函数
2006/10/09 PHP
PHP用mysql数据库存储session的代码
2010/03/05 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
tsconfig.json配置详解
2019/05/17 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
Python yield 小结和实例
2014/04/25 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
python实现停车管理系统
2018/11/30 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
Numpy之reshape()使用详解
2019/12/26 Python
如何卸载python插件
2020/07/08 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
Yahoo-PHP面试题3
2012/01/14 面试题
城市规划毕业生求职信
2013/10/10 职场文书
文科教师毕业的自我评价
2014/01/16 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
纪委立案决定书
2015/06/24 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL