平�支�¶
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()方法没有实现。�支� 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)