平臺支援¶
asyncio
module(模組)被設計為可攜的 (portable),但由於平臺的底層架構和功能不同,在一些平臺上存在細微的差異和限制。
所有平台¶
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 上的所有事件迴圈都不支援以下 method(方法):
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
只被用於等待 socket 事件:它支援 socket 且最多支援 512 個 socket。loop.add_reader()
和loop.add_writer()
只接受 socket 處理函式(例如不支援 pipe 檔案描述器 (pipe file descriptor))。因為不支援 pipe,所以
loop.connect_read_pipe()
和loop.connect_write_pipe()
method 沒有被實作出來。不支援子行程 (subprocess),也就是說
loop.subprocess_exec()
和loop.subprocess_shell()
method 沒有被實作出來。
ProactorEventLoop
有以下限制:
不支援
loop.add_reader()
和loop.add_writer()
method。
Windows 上單調時鐘 (monotonic clock) 的解析度大約為 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
,在這些版本上它並不支援字元裝置 (character device)。可以手工設置 SelectorEventLoop
來使用 SelectSelector
或 PollSelector
以在這些舊版 macOS 上支援字元裝置。例如:
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)