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中DOM方法的动态性
Apr 11 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 Python
python中requests和https使用简单示例
Jan 18 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
python实现抽奖小程序
Apr 15 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
Django框架创建项目的方法入门教程
Nov 04 Python
django列表筛选功能的实现代码
Mar 27 Python
pycharm sciview的图片另存为操作
Jun 01 Python
pyCharm 实现关闭代码检查
Jun 09 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
PHP数据缓存技术
2007/02/14 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
js调用css属性写法
2013/09/21 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
js实现移动端轮播图
2020/12/21 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python之列表实现栈的工作功能
2019/01/28 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
Python Map 函数的使用
2020/08/28 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
优秀食品类广告词
2014/03/19 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
驻村工作简报
2015/07/20 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
2016年党员岗位承诺书
2016/03/24 职场文书