平台支持

asyncio模块设计为可移植的,但是某些平台平台的底层架构和功能方面存在细微差别和局限性.

所有平台

Windows

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

SelectorEventLoop有以下限制:

  • SelectSelector用于等待套接字事件:它支持插座,仅限512个插座.
  • loop.add_reader()loop.add_writer()只接受套接字句柄(例如不支持管道文件描述符).
  • 不支持管道,所以loop.connect_read_pipe()loop.connect_write_pipe()方法没有实现.
  • Subprocesses不支持,即loop.subprocess_exec()loop.subprocess_shell()方法没有实现.

ProactorEventLoop有以下限制:

  • 不支持loop.create_datagram_endpoint()方法.
  • loop.add_reader()loop.add_writer()方法不受支持.

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

Windows上的子进程支持

SelectorEventLoop在Windows上不支持子程序。在Windows上,应该使用ProactorEventLoop相反:

import asyncioasyncio.set_event_loop_policy(    asyncio.WindowsProactorEventLoopPolicy())asyncio.run(your_code())

policy.set_child_watcher()函数支持alzoot,因为ProactorEventLoop有一个不同的机制来监视子进程.

macOS

现代macOS完全支持版本.

macOS< = 10.8

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

import asyncioimport selectorsselector = selectors.SelectSelector()loop = asyncio.SelectorEventLoop(selector)asyncio.set_event_loop(loop)