The
asyncio
模块被设计为可移植,但某些平台有细微差异和局限性,由于平台的底层体系结构和能力。
loop.add_reader()
and
loop.add_writer()
无法用于监视文件 I/O。
源代码: Lib/asyncio/proactor_events.py , Lib/asyncio/windows_events.py , Lib/asyncio/windows_utils.py
3.8 版改变:
在 Windows,
ProactorEventLoop
现在是默认事件循环。
Windows 中的所有事件循环都不支持下列方法:
loop.create_unix_connection()
and
loop.create_unix_server()
不被支持。
socket.AF_UNIX
socket family is specific to Unix.
loop.add_signal_handler()
and
loop.remove_signal_handler()
不支持。
SelectorEventLoop
拥有下列局限性:
SelectSelector
is used to wait on socket events: it supports sockets and is limited to 512 sockets.
loop.add_reader()
and
loop.add_writer()
only accept socket handles (e.g. pipe file descriptors are not supported).
管道不支持,所以
loop.connect_read_pipe()
and
loop.connect_write_pipe()
方法未实现。
子进程
不被支持,即
loop.subprocess_exec()
and
loop.subprocess_shell()
方法未实现。
ProactorEventLoop
拥有下列局限性:
The
loop.add_reader()
and
loop.add_writer()
methods are not supported.
The resolution of the monotonic clock on Windows is usually around 15.6 msec. The best resolution is 0.5 msec. The resolution depends on the hardware (availability of HPET ) and on the Windows configuration.
On Windows, the default event loop
ProactorEventLoop
supports subprocesses, whereas
SelectorEventLoop
不会。
The
policy.set_child_watcher()
function is also not supported, as
ProactorEventLoop
has a different mechanism to watch child processes.
完全支持现代 macOS 版本。
macOS <= 10.8
On macOS 10.6, 10.7 and 10.8, the default event loop uses
selectors.KqueueSelector
, which does not support character devices on these versions. The
SelectorEventLoop
can be manually configured to use
SelectSelector
or
PollSelector
to support character devices on these older versions of macOS. Example:
import asyncio import selectors selector = selectors.SelectSelector() loop = asyncio.SelectorEventLoop(selector) asyncio.set_event_loop(loop)