18.5. asyncio – Асинхронный ввод-вывод, цикл событий, корутины и задачи¶asyncio – Asynchronous I/O, event loop, coroutines and tasks
Новое в версии 3.4.
Исходный код: Lib/asyncio/
Примечание
Пакет asyncio был включен в стандартную библиотеку на временной основе. Обратно несовместимые изменения (вплоть до удаления модуля) могут быть внесены, если основные разработчики сочтут это необходимым.
Этот модуль предоставляет инфраструктуру для написания однопоточного конкурентного кода с использованием корутин, мультиплексирования доступа к вводу-выводу через сокеты и другие ресурсы, запуска сетевых клиентов и серверов, а также других связанных примитивов. Ниже приведён более подробный список содержимого пакета:
- подключаемый цикл событий с различными системно-зависимыми реализациями;
- транспорт и протокол абстракции (аналогичные тем, что в Twisted);
- конкретная поддержка TCP, UDP, SSL, каналов подпроцессов, отложенных вызовов и других (некоторые могут быть системно-зависимыми);
- класс
Future, который повторяет класс из модуляconcurrent.futures, но адаптирован для использования с циклом событий; - корутины и задачи на основе
yield from(PEP 380), для написания конкурентного кода в последовательном стиле; - поддержка отмены для
Futures и корутин; - примитивы синхронизации для использования между корутинами в
одном потоке, по аналогии с теми, что в модуле
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. FutureFutures
- 18.5.1.5. ЗадачиTasks
- 18.5.1.6. Создание подключенийCreating connections
- 18.5.1.7. Создание прослушивающих подключенийCreating listening connections
- 18.5.1.8. Наблюдение за файловыми дескрипторамиWatch file descriptors
- 18.5.1.9. Низкоуровневые операции с сокетамиLow-level socket operations
- 18.5.1.10. Разрешение имени хостаResolve host name
- 18.5.1.11. Подключение каналовConnect pipes
- 18.5.1.12. Сигналы UNIXUNIX signals
- 18.5.1.13. ИсполнительExecutor
- 18.5.1.14. API обработки ошибокError Handling API
- 18.5.1.15. Режим отладкиDebug mode
- 18.5.1.16. СерверServer
- 18.5.1.17. Handle
- 18.5.1.18. Примеры циклов событийEvent loop examples
- 18.5.1.18.1. Hello World с call_soon()Hello World with call_soon()
- 18.5.1.18.2. Отображение текущей даты с call_later()Display the current date with call_later()
- 18.5.1.18.3. Наблюдение за файловым дескриптором на события чтенияWatch a file descriptor for read events
- 18.5.1.18.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. LimitOverrunError
- 18.5.5.7. Примеры с потоками данныхStream examples
- 18.5.5.7.1. TCP-эхо-клиент с использованием потоков данныхTCP echo client using streams
- 18.5.5.7.2. TCP-эхо-сервер с использованием потоков данныхTCP echo server using streams
- 18.5.5.7.3. Получение HTTP-заголовковGet HTTP headers
- 18.5.5.7.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