Содержание страницы
Поддержка платформ¶Platform Support
Модуль asyncio спроектирован переносимым, однако на некоторых платформах есть тонкие различия и ограничения, обусловленные базовой архитектурой и возможностями платформ.
Все платформы¶All Platforms
loop.add_reader()иloop.add_writer()не могут использоваться для мониторинга файлового ввода/вывода.
Windows¶
Все циклы событий в 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.create_datagram_endpoint()не поддерживается.Методы
loop.add_reader()иloop.add_writer()не поддерживаются.
Разрешение монотонных часов в Windows обычно составляет около 15,6 мс. Наилучшее разрешение – 0,5 мс. Разрешение зависит от оборудования (наличие HPET) и конфигурации Windows.
Поддержка подпроцессов в Windows¶Subprocess Support on 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 полностью поддерживаются.
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)