On this page
Platform Support
asyncio模块设计为可移植的,但是由于平台的底层体系结构和Function,某些平台存在细微的差异和限制。
All Platforms
- loop.add_reader()和loop.add_writer()无法用于监视文件 I/O。
Windows
源代码: Lib/asyncio/proactor_events.py,Lib/asyncio/windows_events.py,Lib/asyncio/windows_utils.py
在版本 3.8 中更改:在 Windows 上,ProactorEventLoop现在是默认的事件循环。
Windows 上的所有事件循环都不支持以下方法:
不支持loop.create_unix_connection()和loop.create_unix_server()。 socket.AF_UNIX套接字家族特定于 Unix。
SelectorEventLoop具有以下限制:
SelectSelector用于 await 套接字事件:它支持套接字,并且限制为 512 个套接字。
loop.add_reader()和loop.add_writer()仅接受套接字句柄(例如,不支持管道文件 Descriptors)。
不支持管道,因此未实现loop.connect_read_pipe()和loop.connect_write_pipe()方法。
不支持Subprocesses,即未实现loop.subprocess_exec()和loop.subprocess_shell()方法。
ProactorEventLoop具有以下限制:
Windows 上单调时钟的分辨率通常约为 15.6 毫秒。最佳分辨率为 0.5 毫秒。解决方案取决于硬件(可用性HPET)和 Windows 配置。
Windows 上的子流程支持
在 Windows 上,默认事件循环ProactorEventLoop支持子进程,而SelectorEventLoop不支持。
也不支持policy.set_child_watcher()函数,因为ProactorEventLoop具有监视子进程的不同机制。
macOS
完全支持现代 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)