Перейти к содержимому

18.5. asyncio – Асинхронный ввод/вывод, цикл событий, корутины и задачи

Новое в версии 3.4.

Исходный код: Lib/asyncio/


Этот модуль предоставляет инфраструктуру для написания однопоточного конкурентного кода с использованием корутин, мультиплексирования доступа к вводу/выводу через сокеты и другие ресурсы, запуска сетевых клиентов и серверов, а также других связанных примитивов. Ниже приведён более подробный список содержимого пакета:

  • подключаемый цикл событий с различными системно-зависимыми реализациями;

  • транспорт и протокол абстракции (похожие на те, что в Twisted);

  • конкретная поддержка TCP, UDP, SSL, каналов подпроцессов, отложенных вызовов и других (некоторые могут зависеть от системы);

  • класс Future, который имитирует класс в модуле concurrent.futures, но адаптирован для использования с циклом событий;

  • корутины и задачи на основе yield from (PEP 380), чтобы помочь писать конкурентный код последовательным образом;

  • поддержка отмены для Futures и корутин;

  • примитивы синхронизации для использования между корутинами в одном потоке, имитирующие те, что в модуле threading;

  • интерфейс для передачи работы в пул потоков на случаи, когда совершенно необходимо использовать библиотеку, которая выполняет блокирующие вызовы ввода/вывода.

Асинхронное программирование сложнее классического «последовательного» программирования: смотрите страницу Разработка с asyncio, где перечислены типичные ловушки и объясняется, как их избежать. Включите режим отладки во время разработки, чтобы обнаруживать типичные проблемы.

Содержание:

Смотрите также

Модуль asyncio был спроектирован в PEP 3156. Мотивационное введение в транспорты и протоколы см. в PEP 3153.