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实现问号表达式(?)的方法
Nov 27 Python
Python简单进程锁代码实例
Apr 27 Python
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
python游戏地图最短路径求解
Jan 16 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
详解python配置虚拟环境
Apr 08 Python
python 实现屏幕录制示例
Dec 23 Python
关于Django Models CharField 参数说明
Mar 31 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
May 25 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 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 ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
Python解析xml中dom元素的方法
2015/03/12 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
PyQt5每天必学之组合框
2018/04/20 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
python多进程控制学习小结
2018/10/31 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
keras得到每层的系数方式
2020/06/15 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
Python实现随机爬山算法
2021/01/29 Python
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
业务内勤岗位职责
2014/04/30 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书