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 22 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
Python KMeans聚类问题分析
Feb 23 Python
python中format()函数的简单使用教程
Mar 14 Python
Python lambda函数基本用法实例分析
Mar 16 Python
python 2.7.14安装图文教程
Apr 08 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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中使用GD库做验证码
2016/03/31 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
更优雅的事件触发兼容
2011/10/24 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
简单介绍Python中的readline()方法的使用
2015/05/24 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
python全栈开发语法总结
2020/11/22 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
在C#中如何实现多态
2014/07/02 面试题
为什么要做架构设计
2015/07/08 面试题
公开承诺书格式
2014/05/21 职场文书
学生检讨书
2015/01/27 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
调解书格式范本
2015/05/20 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
python爬虫--selenium模块
2021/03/31 Python
Linux中sftp常用命令整理
2022/06/28 Servers