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聊天室实例程序分享
Jan 05 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
基于python时间处理方法(详解)
Aug 14 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
python3人脸识别的两种方法
Apr 25 Python
Python使用贪婪算法解决问题
Oct 22 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
Feb 26 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
Python爬虫回测股票的实例讲解
Jan 22 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
python分布式编程实现过程解析
2019/11/08 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
Python数据正态性检验实现过程
2020/04/18 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
提拔干部考察材料
2014/05/26 职场文书
2015年医生个人工作总结
2015/04/25 职场文书