平台支持¶
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()
andloop.create_unix_server()
are not supported. Thesocket.AF_UNIX
socket family is specific to 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()
方法。
The resolution of the monotonic clock on Windows is usually around 15.6 milliseconds. The best resolution is 0.5 milliseconds. The resolution depends on the hardware (availability of HPET) and on the Windows configuration.
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)