18.5. asyncio – Асинхронный ввод-вывод, цикл событий, корутины и задачи¶asyncio – Asynchronous I/O, event loop, coroutines and tasks
Примечание
Пакет asyncio был включен в стандартную библиотеку на временной основе. Обратно несовместимые изменения (вплоть до удаления модуля) могут быть внесены, если основные разработчики сочтут это необходимым.
Новое в версии 3.4.
Исходный код: Lib/asyncio/
Этот модуль предоставляет инфраструктуру для написания однопоточного конкурентного кода с использованием корутин, мультиплексирования доступа к вводу-выводу через сокеты и другие ресурсы, запуска сетевых клиентов и серверов, а также других связанных примитивов. Ниже приведён более подробный список содержимого пакета:
- подключаемый цикл событий с различными системно-зависимыми реализациями;
- транспорт и протокол абстракции (аналогичные тем, что в Twisted);
- конкретная поддержка TCP, UDP, SSL, каналов подпроцессов, отложенных вызовов и других (некоторые могут быть системно-зависимыми);
- класс Future, который имитирует одноимённый класс из модуля concurrent.futures, но адаптирован для использования с циклом событий;
- корутины и задачи, основанные на yield from (PEP 380), чтобы помочь писать конкурентный код в последовательном стиле;
- поддержка отмены для Future и корутин;
- примитивы синхронизации для использования между корутинами в одном потоке, имитирующие те, что в модуле threading;
- интерфейс для передачи работы в пул потоков на случай, когда абсолютно необходимо использовать библиотеку, выполняющую блокирующие вызовы ввода-вывода.
Асинхронное программирование сложнее классического «последовательного» программирования: см. страницу Разработка с asyncio, где перечислены распространённые ловушки и объясняется, как их избежать. Включите режим отладки при разработке, чтобы выявлять типичные проблемы.
Содержание:
- 18.5.1. Базовый цикл событийBase Event Loop
- 18.5.1.1. Запуск цикла событийRun an event loop
- 18.5.1.2. ВызовыCalls
- 18.5.1.3. Отложенные вызовыDelayed calls
- 18.5.1.4. ЗадачиTasks
- 18.5.1.5. Создание подключенийCreating connections
- 18.5.1.6. Создание прослушивающих подключенийCreating listening connections
- 18.5.1.7. Отслеживание файловых дескрипторовWatch file descriptors
- 18.5.1.8. Низкоуровневые операции с сокетамиLow-level socket operations
- 18.5.1.9. Разрешение имени хостаResolve host name
- 18.5.1.10. Подключение каналовConnect pipes
- 18.5.1.11. Сигналы UNIXUNIX signals
- 18.5.1.12. ИсполнительExecutor
- 18.5.1.13. API обработки ошибокError Handling API
- 18.5.1.14. Режим отладкиDebug mode
- 18.5.1.15. СерверServer
- 18.5.1.16. Handle
- 18.5.1.17. Примеры работы с циклом событийEvent loop examples
- 18.5.1.17.1. Hello World с помощью call_soon()Hello World with call_soon()
- 18.5.1.17.2. Отображение текущей даты с помощью call_later()Display the current date with call_later()
- 18.5.1.17.3. Отслеживание файлового дескриптора на события чтенияWatch a file descriptor for read events
- 18.5.1.17.4. Установка обработчиков сигналов SIGINT и SIGTERMSet signal handlers for SIGINT and SIGTERM
- 18.5.2. Циклы событийEvent loops
- 18.5.2.1. Функции цикла событийEvent loop functions
- 18.5.2.2. Доступные циклы событийAvailable event loops
- 18.5.2.3. Поддержка платформPlatform support
- 18.5.2.4. Политики цикла событий и политика по умолчаниюEvent loop policies and the default policy
- 18.5.2.5. Интерфейс политики цикла событийEvent loop policy interface
- 18.5.2.6. Доступ к глобальной политике цикла событийAccess to the global loop policy
- 18.5.3. Задачи и корутиныTasks and coroutines
- 18.5.4. Транспорты и протоколы (API на основе колбэков)Transports and protocols (callback based API)
- 18.5.4.1. ТранспортыTransports
- 18.5.4.2. ПротоколыProtocols
- 18.5.4.2.1. Классы протоколовProtocol classes
- 18.5.4.2.2. Колбэки соединенияConnection callbacks
- 18.5.4.2.3. Потоковые протоколыStreaming protocols
- 18.5.4.2.4. Протоколы датаграммDatagram protocols
- 18.5.4.2.5. Колбэки управления потокомFlow control callbacks
- 18.5.4.2.6. Корутины и протоколыCoroutines and protocols
- 18.5.4.3. Примеры протоколовProtocol examples
- 18.5.4.3.1. Протокол TCP-эхо-клиентаTCP echo client protocol
- 18.5.4.3.2. Протокол TCP-эхо-сервераTCP echo server protocol
- 18.5.4.3.3. Протокол UDP-эхо-клиентаUDP echo client protocol
- 18.5.4.3.4. Протокол UDP-эхо-сервераUDP echo server protocol
- 18.5.4.3.5. Регистрация открытого сокета для ожидания данных через протоколRegister an open socket to wait for data using a protocol
- 18.5.5. Потоки данных (API на корутинах)Streams (coroutine based API)
- 18.5.5.1. Функции потоков данныхStream functions
- 18.5.5.2. StreamReader
- 18.5.5.3. StreamWriter
- 18.5.5.4. StreamReaderProtocol
- 18.5.5.5. IncompleteReadError
- 18.5.5.6. Примеры работы с потокамиStream examples
- 18.5.5.6.1. TCP-эхо-клиент с использованием потоковTCP echo client using streams
- 18.5.5.6.2. TCP-эхо-сервер с использованием потоковTCP echo server using streams
- 18.5.5.6.3. Получение HTTP-заголовковGet HTTP headers
- 18.5.5.6.4. Регистрация открытого сокета для ожидания данных с помощью потоковRegister an open socket to wait for data using streams
- 18.5.6. ПодпроцессыSubprocess
- 18.5.6.1. Цикл событий WindowsWindows event loop
- 18.5.6.2. Создание подпроцесса: высокоуровневый API с использованием процессаCreate a subprocess: high-level API using Process
- 18.5.6.3. Создание подпроцесса: низкоуровневый API с использованием subprocess.PopenCreate a subprocess: low-level API using subprocess.Popen
- 18.5.6.4. КонстантыConstants
- 18.5.6.5. ПроцессProcess
- 18.5.6.6. Подпроцессы и потокиSubprocess and threads
- 18.5.6.7. Примеры с подпроцессамиSubprocess examples
- 18.5.7. Примитивы синхронизацииSynchronization primitives
- 18.5.8. ОчередиQueues
- 18.5.9. Разработка с asyncioDevelop with asyncio
- 18.5.9.1. Режим отладки asyncioDebug mode of asyncio
- 18.5.9.2. ОтменаCancellation
- 18.5.9.3. Конкурентность и многопоточностьConcurrency and multithreading
- 18.5.9.4. Корректная обработка блокирующих функцийHandle blocking functions correctly
- 18.5.9.5. ЛогированиеLogging
- 18.5.9.6. Обнаружение объектов корутин, которые никогда не были запланированыDetect coroutine objects never scheduled
- 18.5.9.7. Обнаружение необработанных исключенийDetect exceptions never consumed
- 18.5.9.8. Правильное связывание корутинChain coroutines correctly
- 18.5.9.9. Уничтожение ожидающих задачPending task destroyed
- 18.5.9.10. Закрытие транспортов и циклов событийClose transports and event loops