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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
Python排序搜索基本算法之选择排序实例分析
Dec 09 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
python制作mysql数据迁移脚本
Jan 01 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
Python ConfigParser模块的使用示例
Oct 12 Python
详解Python类和对象内容
Jun 22 Python
浅析Python实现DFA算法
Jun 26 Python
Python进程池与进程锁之语法学习
Apr 11 Python
Elasticsearch 基本查询和组合查询
Apr 19 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二维数组合并及去重复的方法
2015/03/04 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python多维数组切片方法
2018/04/13 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
Python基于Faker假数据构造库
2020/11/30 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
行政助理求职自荐信
2013/10/26 职场文书
考试不及格的检讨书
2014/01/22 职场文书
写求职信有什么意义
2014/02/17 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
高二学生评语大全
2014/04/25 职场文书
关于青春的演讲稿
2014/05/05 职场文书
国企干部对照检查材料
2014/08/22 职场文书
中学总务处工作总结
2015/08/12 职场文书
Django程序的优化技巧
2021/04/29 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python