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缩进区别分析
Feb 15 Python
python中map、any、all函数用法分析
Apr 21 Python
python实现将元祖转换成数组的方法
May 04 Python
python的unittest测试类代码实例
Dec 07 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
Aug 09 Python
PyCharm导入python项目并配置虚拟环境的教程详解
Oct 13 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
May 29 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 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邮件专题
2006/10/09 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
php学习笔记之基础知识
2014/11/08 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
python修改操作系统时间的方法
2015/05/18 Python
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
wxPython实现绘图小例子
2019/11/19 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
九年级英语教学反思
2014/01/31 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
出纳员的岗位职责
2014/02/22 职场文书
大家访活动实施方案
2014/03/10 职场文书
2014年党支部承诺书
2014/05/30 职场文书
中班下学期个人总结
2015/02/12 职场文书
个人工作能力自我评价
2015/03/05 职场文书
高中历史教学反思
2016/02/19 职场文书
python保存图片的四个常用方法
2022/02/28 Python