Поддержка платформы¶
Модуль asyncio
разработан для переносимости, но некоторые платформы имеют тонкие различия и ограничения, связанные с базовой архитектурой и возможностями платформ.
Все платформы¶
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()
принимают только дескрипторы сокетов (например, дескрипторы файлов pipe не поддерживаются).Трубы не поддерживаются, поэтому методы
loop.connect_read_pipe()
иloop.connect_write_pipe()
не реализованы.Subprocesses не поддерживаются, т.е. методы
loop.subprocess_exec()
иloop.subprocess_shell()
не реализованы.
ProactorEventLoop
имеет следующие ограничения:
Методы
loop.add_reader()
иloop.add_writer()
не поддерживаются.
Разрешение монотонных часов в Windows обычно составляет около 15,6 мс. Наилучшее разрешение составляет 0,5 мс. Разрешение зависит от аппаратного обеспечения (наличие HPET) и от конфигурации Windows.
Поддержка подпроцессов в Windows¶
В Windows стандартный цикл событий ProactorEventLoop
поддерживает подпроцессы, а SelectorEventLoop
- нет.
Функция policy.set_child_watcher()
также не поддерживается, поскольку ProactorEventLoop
имеет другой механизм наблюдения за дочерними процессами.
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)