asyncio是遵循Python标准库的一个异步 I/O框架.在这篇文章里,我将介绍 uvloop: 可以完整替代asyncio事件循环.uvloop是用Cython写的,基于 libuv.
uvloop 使得 asyncio 更快. 实际上,比nodejs,gevent,以及其他任何Python异步框架至少快两倍 .uvloop asyncio 基于性能的测试接近于Go程序.
Uvloop最终目的使得Asyncio更加快速。
asyncio 和 uvloop
asyncio 模块, 是在 PEP 3156引入的, 是一个集合,包含网络传输, 协议, 和抽象的流, 带有可插拔的事件循环. 事件循环是asyncio的核心.它提供如下API:
- 调用方法的调度
- 通过网络传输数据
- 执行 DNS 查询,
- 处理 OS 操作系统信号
- 对创建服务器和连接进行封装
- 子进程异步处理
uvloop 是 Python 内建的 asyncio 事件循环的替代品,你可以通过 pip 来安装:
pip install uvloop
在你的 asyncio 代码中使用 uvloop 非常简单:
**import** asyncio
**import** uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
上面这段代码使得任何对
asyncio.get_event_loop()
的调用都将返回一个 uvloop 的实例。
实例2:
import asyncio
import uvloop
声明使用 uvloop 事件循环
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
loop = uvloop.new_event_loop()
asyncio.set_event_loop(loop)
我们可以安全地下结论说,有了 uvloop,我们可以写出每秒每 CPU 核心可以推送上万次请求的 Python 网络互连代码。在一个多核心系统上,用上进程池,也许还可以进一步地提高性能。
在 Python 3.5 中,配合async/awit的力量, uvloop 和 asyncio 使得用 Python 写出高性能的网络互连代码比以前任何时候都简单。
版权归原作者 wlq* 所有, 如有侵权,请联系我们删除。