Поддержка платформ
Модуль asyncio разработан для переносимости, однако некоторые платформы имеют незначительные отличия и ограничения, обусловленные архитектурой и возможностями платформ.
Все платформы
-
loop.add_reader()иloop.add_writer()нельзя использовать для отслеживания операций ввода-вывода с файлами. -
loop.connect_read_pipe()иloop.connect_write_pipe()нельзя использовать с обычными файлами. Список объектов, поддерживаемых на каждой платформе, см. в разделе Поддерживаемые объекты каналов.
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()не поддерживаются. -
loop.connect_read_pipe()иloop.connect_write_pipe()принимают только дескриптор, открытый для перекрывающегося ввода-вывода. Сведения о поддерживаемых объектах см. в разделе Поддерживаемые объекты каналов.
Разрешение монотонных часов в Windows обычно составляет около 15,6 миллисекунды. Наилучшее разрешение — 0,5 миллисекунды. Разрешение зависит от оборудования (наличия HPET) и конфигурации Windows.
Поддержка подпроцессов в Windows
В Windows цикл событий по умолчанию ProactorEventLoop поддерживает подпроцессы, а SelectorEventLoop — нет.
macOS
Современные версии macOS полностью поддерживаются.
macOS <= 10.8
В macOS 10.6, 10.7 и 10.8 цикл событий по умолчанию использует selectors.KqueueSelector, который не поддерживает символьные устройства в этих версиях. Для поддержки символьных устройств в более старых версиях macOS можно вручную настроить SelectorEventLoop, чтобы он использовал SelectSelector или PollSelector. Пример:
import asyncio import selectors selector = selectors.SelectSelector() loop = asyncio.SelectorEventLoop(selector) asyncio.set_event_loop(loop)
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/asyncio-platforms.html