asyncio
The asyncio 模块被设计为可移植,但某些平台有细微差异和局限性,由于平台的底层体系结构和能力。
loop.add_reader() and loop.add_writer() 无法用于监视文件 I/O。
loop.add_reader()
loop.add_writer()
源代码: Lib/asyncio/proactor_events.py , Lib/asyncio/windows_events.py , Lib/asyncio/windows_utils.py
3.8 版改变: 在 Windows, ProactorEventLoop 现在是默认事件循环。
ProactorEventLoop
Windows 中的所有事件循环都不支持下列方法:
loop.create_unix_connection() and loop.create_unix_server() 不被支持。 socket.AF_UNIX socket family is specific to Unix.
loop.create_unix_connection()
loop.create_unix_server()
socket.AF_UNIX
loop.add_signal_handler() and loop.remove_signal_handler() 不支持。
loop.add_signal_handler()
loop.remove_signal_handler()
SelectorEventLoop 拥有下列局限性:
SelectorEventLoop
SelectSelector is used to wait on socket events: it supports sockets and is limited to 512 sockets.
SelectSelector
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.connect_read_pipe()
loop.connect_write_pipe()
子进程 不被支持,即 loop.subprocess_exec() and loop.subprocess_shell() 方法未实现。
loop.subprocess_exec()
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 milliseconds. The best resolution is 0.5 milliseconds. 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.
policy.set_child_watcher()
完全支持现代 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:
selectors.KqueueSelector
PollSelector
import asyncio import selectors selector = selectors.SelectSelector() loop = asyncio.SelectorEventLoop(selector) asyncio.set_event_loop(loop)
策略
延伸
键入搜索术语或模块、类、函数名称。