平台支持¶
asyncio
模块旨在可移植,但由于平台底层架构和功能的差异,某些平台存在细微的差异和限制。
所有平台¶
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。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 版本完全受支持。
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)