平台支持 – 异步I / O(Python教程)(参考资料)
平台支持
asyncio
模块设计为可移植的,但是某些平台在平台的底层架构和功能方面存在细微差别和局限性.
Windows
Windows上的所有事件循环都不支持以下方法:
loop.create_unix_connection()
和loop.create_unix_server()
不受支持.socket.AF_UNIX
socket系列是Unix特有的.loop.add_signal_handler()
和loop.remove_signal_handler()
不支持.
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
可以手动配置为使用SelectSelector
或PollSelector
来支持旧版本macOS上的字符设备。例如:
import asyncioimport selectorsselector = selectors.SelectSelector()loop = asyncio.SelectorEventLoop(selector)asyncio.set_event_loop(loop)