平臺支持?
asyncio
模塊被設(shè)計為可移植的,但由于平臺的底層架構(gòu)和功能,一些平臺存在細(xì)微的差異和限制。
所有平臺?
loop.add_reader()
和loop.add_writer()
不能用來監(jiān)視文件I/O。
Windows?
源代碼: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py
在 3.8 版更改: 在 Windows 上,ProactorEventLoop
現(xiàn)在是默認(rèn)的事件循環(huán)。
Windows上的所有事件循環(huán)都不支持以下方法:
不支持
loop.create_unix_connection()
和loop.create_unix_server()
。socket.AF_UNIX
套接字相關(guān)參數(shù)僅限于Unix。不支持
loop.add_signal_handler()
和loop.remove_signal_handler()
。
SelectorEventLoop
有下列限制:
SelectSelector
只被用于等待套接字事件:它支持套接字且最多支持512個套接字。loop.add_reader()
和loop.add_writer()
只接受套接字處理回調(diào)函數(shù)(如管道、文件描述符等都不支持)。因為不支持管道,所以
loop.connect_read_pipe()
和loop.connect_write_pipe()
方法沒有實現(xiàn)。不支持 Subprocesses ,也就是
loop.subprocess_exec()
和loop.subprocess_shell()
方法沒有實現(xiàn)。
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的子進(jìn)程支持?
在 Windows 上,默認(rèn)的事件循環(huán) ProactorEventLoop
支持子進(jìn)程,而 SelectorEventLoop
則不支持。
也不支持 policy.set_child_watcher()
函數(shù),ProactorEventLoop
有不同的機(jī)制來監(jiān)視子進(jìn)程。
macOS?
完整支持流行的macOS版本。
macOS <= 10.8
在 macOS 10.6, 10.7 和 10.8 上,默認(rèn)的事件循環(huán)使用 selectors.KqueueSelector
,在這些版本上它并不支持字符設(shè)備。 可以手工配置 SelectorEventLoop
來使用 SelectSelector
或 PollSelector
以在這些較老版本的 macOS 上支持字符設(shè)備。 例如:
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)