【游戏编程扯淡精粹】Python asyncio
Python 3.4
- asyncio提供了完善的异步IO支持;
- 异步操作需要在coroutine中通过yield from完成;
- 多个coroutine可以封装成一组Task然后并发执行。
Python 3.5+ 请注意,async和await是针对coroutine的新语法,要使用新的语法,只需要做两步简单的替换:
- 把@asyncio.coroutine替换为async;
- 把yield from替换为await。
asyncio 提供一组 高层级 API 用于:
- 并发地 运行 Python 协程 并对其执行过程实现完全控制;
- 执行 网络 IO 和 IPC;
- 控制 子进程;
- 通过 队列 实现分布式任务;
- 同步 并发代码;
此外,还有一些 低层级 API 以支持 库和框架的开发者 实现:
- 创建和管理 事件循环,以提供异步 API 用于 网络化, 运行 子进程,处理 OS 信号 等等;
- 使用 transports 实现高效率协议;
- 通过 async/await 语法 桥接 基于回调的库和代码。
小结
- aysncio异步IO库解决IO密集型程序的阻塞问题
- 反过来说,不能解决计算密集型程序的问题
- 实际上,Python因为GIL本身也不能解决
- Python使用协程和消息循环实现asyncio
- await标记异步IO操作,async标记包含异步IO操作的函数为协程,协程可以被加入消息循环处理
- 注意Python版本3.5+
|