平台支持 — Python 文档
来自菜鸟教程
Python/docs/3.8/library/asyncio-platforms
平台支持
asyncio 模块被设计为可移植的,但由于平台的底层架构和功能,一些平台存在细微的差异和限制。
视窗
源代码: :source:`Lib/asyncio/proactor_events.py`, :source:`Lib/asyncio/windows_events.py`, :source:`Lib/asyncio/windows_utils.py`
3.8 版更改: 在 Windows 上,ProactorEventLoop 现在是默认事件循环。
Windows 上的所有事件循环都不支持以下方法:
- 不支持
loop.create_unix_connection()
和loop.create_unix_server()
。 socket.AF_UNIX 套接字家族特定于 Unix。 - 不支持 loop.add_signal_handler() 和 loop.remove_signal_handler()。
SelectorEventLoop 有以下限制:
- SelectSelector 用于等待套接字事件:它支持套接字,限制为 512 个套接字。
- loop.add_reader() 和 loop.add_writer() 只接受套接字句柄(例如 不支持管道文件描述符)。
- 不支持管道,因此未实现
loop.connect_read_pipe()
和loop.connect_write_pipe()
方法。 - 不支持子进程,即
loop.subprocess_exec()
和loop.subprocess_shell()
方法未实现。
ProactorEventLoop 有以下限制:
- 不支持 loop.add_reader() 和 loop.add_writer() 方法。
Windows 上单调时钟的分辨率通常在 15.6 毫秒左右。 最佳分辨率为 0.5 毫秒。 分辨率取决于硬件(HPET 的可用性)和 Windows 配置。
Windows 上的子进程支持
在 Windows 上,默认的事件循环 ProactorEventLoop 支持子进程,而 SelectorEventLoop 不支持。
policy.set_child_watcher() 函数也不支持,因为 ProactorEventLoop 有一个不同的机制来观察子进程。
苹果系统
完全支持现代 macOS 版本。
macOS <= 10.8
在 macOS 10.6、10.7 和 10.8 上,默认事件循环使用 selectors.KqueueSelector,在这些版本上不支持字符设备。 SelectorEventLoop 可以手动配置为使用 SelectSelector 或 PollSelector 在这些旧版本的 macOS 上支持字符设备。 例子:
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)