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 相关文章推荐
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
python使用urllib2提交http post请求的方法
May 26 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
python中实现精确的浮点数运算详解
Nov 02 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
Python socket实现简单聊天室
Apr 01 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
Python3.5运算符操作实例详解
Apr 25 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
python中pyqtgraph知识点总结
Jan 26 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 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
javascript实现画板功能
2020/04/12 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
Python subprocess库的使用详解
2018/10/26 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
国际商务专业求职信
2014/07/15 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
家长会后的感想
2015/08/11 职场文书
python中print格式化输出的问题
2021/04/16 Python
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技