Поддержка платформ¶
Модуль asyncio
предназначен для переносимости, но у некоторых платформ
есть небольшие различия и ограничения из-за базовой архитектуры и возможностей
платформ.
Все платформы¶
loop.add_reader()
иloop.add_writer()
нельзя использовать для отслеживания файлового ввода-вывода.
Windows¶
Изменено в версии 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.
Поддержка подпроцессов в 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)