tornado-uvloop使用
简单言之
asyncio 是Python3.4 之后引入的标准库的,这个包使用事件循环驱动的协程实现并发。
uvloop 是 基于libuv 代替 asyncio 内事件循环的库
livbuv 则是nodejs使用的io库
github具体地址:https://github.com/MagicStack/uvloop
uvloop官方文档:https://uvloop.readthedocs.io/user/index.html
#这里是实现策略转化,也可以直接安装tornadouvloop包,这里这是把内容提出来了
#这里是我新建的文件 tornado_uvloop.py 文件
from tornado.platform.asyncio import BaseAsyncIOLoop
import uvloop
import asyncio
class TornadoUvloop(BaseAsyncIOLoop):
def initialize(self, **kwargs):
loop = uvloop.new_event_loop() #更换策略
try:
super(TornadoUvloop, self).initialize(
loop, close_loop=True, **kwargs)
except Exception:
loop.close()
raise
#这里为启动的文件
import tornado.web #web框架模块
import tornado.ioloop #核心IO循环模块
import tornado.httpserver #tornado的HTTP服务
import tornado.options #全局参数定义,存储和转化模块
import config #导入自定义配置的py文件
import application #导入自定义的应用程序模块
from tornado_uvloop import TornadoUvloop #这里导入 为上面写的 tornado_uvloop.py 文件
"""
#server
服务设置
"""
if __name__=="__main__":
app = application.Application() #处理请求服务
httpServer = tornado.httpserver.HTTPServer(app) #设置HTTP服务器
httpServer.bind(config.options["port"]) #绑定在指定端口
httpServer.start(1) #线程数
tornado.ioloop.IOLoop.configure(TornadoUvloop) #配置文件,启用uvloop策略
tornado.ioloop.IOLoop.current().start() #启动
其他uvloop简单实用:
替换asyncio的事件策略,
import asyncio
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
# 这样可以让 asyncio.get_event_loop() 返回一个 uvloop 的实例
你还可以显式的创建一个uvloop实例,通过调用uvloop.new_event_loop()。
import asyncio
import uvloop
loop = uvloop.new_event_loop()
asyncio.set_event_loop(loop)