Platform SupportПоддержка платформ
Модуль asyncio спроектирован переносимым,
но некоторые платформы имеют тонкие различия и ограничения
из-за базовой архитектуры и возможностей платформ.
All PlatformsВсе платформы
loop.add_reader()иloop.add_writer()не могут использоваться для мониторинга файлового ввода-вывода.
Windows
Исходный код: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py
Изменено в версии 3.8: В Windows ProactorEventLoop теперь является циклом событий по умолчанию.
Все циклы событий в Windows не поддерживают следующие методы:
loop.create_unix_connection()иloop.create_unix_server()не поддерживаются. Семейство сокетовsocket.AF_UNIXспецифично для 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()не реализованы.Подпроцессы не поддерживаются, т.е. методы
loop.subprocess_exec()иloop.subprocess_shell()не реализованы.
ProactorEventLoop имеет следующие ограничения:
Методы
loop.add_reader()иloop.add_writer()не поддерживаются.
Разрешение монотонных часов в Windows обычно составляет около 15.6 миллисекунд. Наилучшее разрешение – 0.5 миллисекунды. Разрешение зависит от аппаратного обеспечения (наличие HPET) и от конфигурации Windows.
Subprocess Support on WindowsПоддержка подпроцессов в Windows
В Windows цикл событий по умолчанию ProactorEventLoop поддерживает
подпроцессы, тогда как SelectorEventLoop – нет.
macOS
Современные версии macOS полностью поддерживаются.
macOS <= 10.8
В macOS 10.6, 10.7 и 10.8 цикл событий по умолчанию
использует selectors.KqueueSelector, который не поддерживает
символьные устройства в этих версиях. SelectorEventLoop
можно вручную настроить на использование SelectSelector
или PollSelector для поддержки символьных устройств на
этих старых версиях macOS. Пример:
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)