平台支撑¶
这个 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
socket系列特定于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()
方法未实现。Subprocesses 不支持,即
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)