平�支�¶

asyncio 模�被设计为�移�的,但由于平�的底层架构和功能,一些平�存在细微的差异和�制。

所有平�¶

Windows¶

�代�: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py


在 3.8 版本�生�更: 在 Windows 上,ProactorEventLoop 现在是默认的事件循环。

Windows上的所有事件循环都�支�以下方法:

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 有下列�制:

通常 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)