Документация Python неофициальный перевод

asyncio-platforms.md

63 строк · 7.0 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.13/library/asyncio-platforms.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Поддержка платформ89Модуль [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) спроектирован переносимым, однако на некоторых платформах есть тонкие различия и ограничения, обусловленные базовой архитектурой и возможностями платформ.1011## Все платформы1213- [`loop.add_reader()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.add_reader) и [`loop.add_writer()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.add_writer) не могут использоваться для мониторинга файлового ввода/вывода.1415## Windows1617**Исходный код:** [Lib/asyncio/proactor\_events.py](https://python-all.ru/src/3.13/Lib/asyncio/proactor_events.py), [Lib/asyncio/windows\_events.py](https://python-all.ru/src/3.13/Lib/asyncio/windows_events.py), [Lib/asyncio/windows\_utils.py](https://python-all.ru/src/3.13/Lib/asyncio/windows_utils.py)1819---2021Изменено в версии 3.8: В Windows [`ProactorEventLoop`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.ProactorEventLoop) теперь является циклом событий по умолчанию.2223Все циклы событий в Windows не поддерживают следующие методы:2425- [`loop.create_unix_connection()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.create_unix_connection) и [`loop.create_unix_server()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.create_unix_server) не поддерживаются. Семейство сокетов [`socket.AF_UNIX`](https://python-all.ru/3.13/library/socket.html#socket.AF_UNIX) характерно для Unix.26- [`loop.add_signal_handler()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.add_signal_handler) и [`loop.remove_signal_handler()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.remove_signal_handler) не поддерживаются.2728[`SelectorEventLoop`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.SelectorEventLoop) имеет следующие ограничения:2930- [`SelectSelector`](https://python-all.ru/3.13/library/selectors.html#selectors.SelectSelector) используется для ожидания событий сокетов: он поддерживает сокеты и ограничен 512 сокетами.31- [`loop.add_reader()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.add_reader) и [`loop.add_writer()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.add_writer) принимают только дескрипторы сокетов (например, файловые дескрипторы каналов не поддерживаются).32- Каналы не поддерживаются, поэтому методы [`loop.connect_read_pipe()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.connect_read_pipe) и [`loop.connect_write_pipe()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.connect_write_pipe) не реализованы.33- [Подпроцессы](https://python-all.ru/3.13/library/asyncio-subprocess.html#asyncio-subprocess) не поддерживаются, т.е. методы [`loop.subprocess_exec()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.subprocess_exec) и [`loop.subprocess_shell()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.subprocess_shell) не реализованы.3435[`ProactorEventLoop`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.ProactorEventLoop) имеет следующие ограничения:3637- Методы [`loop.add_reader()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.add_reader) и [`loop.add_writer()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.add_writer) не поддерживаются.3839Разрешение монотонных часов в Windows обычно составляет около 15,6 миллисекунды. Лучшее разрешение – 0,5 миллисекунды. Разрешение зависит от оборудования (наличие [HPET](https://python-all.ru/3.13/library/asyncio-platforms.html)) и от конфигурации Windows.4041### Поддержка подпроцессов в Windows4243В Windows цикл событий по умолчанию [`ProactorEventLoop`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.ProactorEventLoop) поддерживает подпроцессы, тогда как [`SelectorEventLoop`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.SelectorEventLoop) – нет.4445Функция [`policy.set_child_watcher()`](https://python-all.ru/3.13/library/asyncio-policy.html#asyncio.AbstractEventLoopPolicy.set_child_watcher) также не поддерживается, поскольку [`ProactorEventLoop`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.ProactorEventLoop) использует другой механизм для наблюдения за дочерними процессами.4647## macOS4849Современные версии macOS полностью поддерживаются.5051macOS \<= 10.85253На macOS 10.6, 10.7 и 10.8 цикл событий по умолчанию использует [`selectors.KqueueSelector`](https://python-all.ru/3.13/library/selectors.html#selectors.KqueueSelector), который не поддерживает символьные устройства в этих версиях. [`SelectorEventLoop`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.SelectorEventLoop) можно настроить вручную для использования [`SelectSelector`](https://python-all.ru/3.13/library/selectors.html#selectors.SelectSelector) или [`PollSelector`](https://python-all.ru/3.13/library/selectors.html#selectors.PollSelector), чтобы обеспечить поддержку символьных устройств на этих старых версиях macOS. Пример:5455```python56import asyncio57import selectors5859selector = selectors.SelectSelector()60loop = asyncio.SelectorEventLoop(selector)61asyncio.set_event_loop(loop)62```63