python Tornado框架的使用示例
作者:RainBol 发布时间:2021-01-03 11:12:11
标签:python,Tornado,框架
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),
]
来源:https://www.cnblogs.com/RainBol/p/13606582.html


猜你喜欢
- 这篇文章主要给大家介绍了关于Django跨域请求问题解决的相关资料,文中介绍的实现方法包括:使用django-cors-headers全局控
- 在网上看了很多解决方法,都没有解决,后来我自己解决了这个问题:出现的问题:在cmd上 “pip install package” 时显示 s
- python 的PIL安装是一件很头疼的的事, 如果你要在python 中使用图型程序那怕只是将个图片从二进制流中存盘(例如使用Scrapy
- 1、TransBigData简介TransBigData是一个为交通时空大数据处理、分析和可视化而开发的Python包。TransBigDa
- 我们来编写一个,引用时用:<!--#include Virtual="page.inc"-->语句即可:pa
- 本文实例讲述了Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法。分享给大家供大家参考。具体如下:这个东东本来是做来给公司数据
- 选项卡Tabs是Web中一种非常常用的功能。用户点击或悬浮对应的菜单项,能切换出对应的内容Bootstrap框架中的选项卡主要有两部分内容组
- 一、MySQL进阶查询首先先创建两张表mysql -u root -pXXX #登陆数据库,XXX为密码crea
- 本文实例讲述了django框架cookie和session用法。分享给大家供大家参考,具体如下:首先知道http协议http协议它是无状态的
- 本文实例为大家分享了python tkinter库实现气泡屏保和锁屏的具体代码,供大家参考,具体内容如下显示效果如下:代码: im
- 可以在Mac OS X 10.2.x(“Jaguar”)和以上版本上Mac OS X使用二进制安装软
- 引言:在阅读源码时,有很多简写的形式,其中一个比较常用的就是getattr()用来调用一个类中的变量或者方法,相关联的hasat
- A.动态页面第一步:创建转向控制页面,创建网站默认的首页文件(通常为"index.asp"或"default.
- Django中提供了“信号调度”,用于在框架执行操作时解耦。通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。Djan
- 说明1、将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果。2、结构分为Abstraction抽象类、Refin
- 1.业务场景有如下树形结构: +—0 +—1 +—2 +—4 +—5 +—3如果删除某个父节点,则其子节点,以及其子节点的子节点,以此类推,
- 今天我们就用一篇文章,带大家梳理matplotlib、seaborn、plotly、pyecharts的绘图原理,让大家学起来不再那么费劲!
- 一、概述:用来描述或者匹配一系列符合某个语句规则的字符串二、单个符号1、英文句点.符号:匹配单个任意字符。表达式t.o 可以匹配:tno,t
- 在开发和调试基于XML的应用的时候,程序员往往为找不到合适的快速桌面XPATH测试软件发愁。诚然,市面上有成套的XML编辑软件,但是它们往往
- 当我们需要将一个一维数组转换成一个多层结构的时候,最简单但是最慢的就是多个for循环嵌套,但是这样做有一些缺点,那就是效率太低、而且有多少层