平台支持 — Python 文档

来自菜鸟教程
Python/docs/3.7/library/asyncio-platforms
跳转至:导航、​搜索

平台支持

asyncio 模块被设计为可移植的,但由于平台的底层架构和功能,一些平台存在细微的差异和限制。

所有平台


视窗

Windows 上的所有事件循环都不支持以下方法:

SelectorEventLoop 有以下限制:

  • SelectSelector 用于等待socket事件:支持sockets,限制为512个sockets。
  • loop.add_reader()loop.add_writer() 只接受套接字句柄(例如 不支持管道文件描述符)。
  • 不支持管道,因此未实现 loop.connect_read_pipe()loop.connect_write_pipe() 方法。
  • 不支持子进程,即 loop.subprocess_exec()loop.subprocess_shell() 方法未实现。

ProactorEventLoop 有以下限制:

Windows 上单调时钟的分辨率通常在 15.6 毫秒左右。 最佳分辨率为 0.5 毫秒。 分辨率取决于硬件(HPET 的可用性)和 Windows 配置。

Windows 上的子进程支持

SelectorEventLoop 在 Windows 上不支持子进程。 在 Windows 上,应该使用 ProactorEventLoop 代替:

import asyncio

asyncio.set_event_loop_policy(
    asyncio.WindowsProactorEventLoopPolicy())

asyncio.run(your_code())

policy.set_child_watcher() 函数也不支持,因为 ProactorEventLoop 有不同的机制来观察子进程。


苹果系统

完全支持现代 macOS 版本。

macOS <= 10.8

在 macOS 10.6、10.7 和 10.8 上,默认事件循环使用 selectors.KqueueSelector,在这些版本上不支持字符设备。 SelectorEventLoop 可以手动配置为使用 SelectSelectorPollSelector 在这些旧版本的 macOS 上支持字符设备。 例子:

import asyncio
import selectors

selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)