Найти в Дзене
Kangaroo

Асинхронное программирование на Python с применением библиотеки asyncio

Модуль asyncio появился в Python версии 3.4 и согласно документации обеспечивает возможность написания параллельного однопоточного кода с применением Coroutine, и асинхронного доступа к вводу\выводу по сокетам и другим ресурсам, запуску сетевых клиентов и серверов. В этой статье дается вводная информация по использованию данного модуля.

Что значит асинхронно?

Модуль asyncio основан на цикле событий. Он в основном ожидает, что что-то произойдет, а затем реагирует на событие. Он отвечает за обработку операций ввода\вывода и системные события.

asyncio реализует цикл несколькими способами. Модуль по умолчанию наиболее эффективен для используемой ОС, однако есть возможность выбрать цикл явно, если вы этого хотите. Цикл событий работает по следующему принципу: когда случится событие А, выполни функцию В.

Можно провести аналогию с сервером, который ожидает запросов. Если сайт не пользуется популярностью, сервер простаивает в течении длительного времени. Но когда он получает запрос, сервер должен реагировать. Эта и будет обработка событий. Когда клиент запрашивает веб-ресурс, сервер вызывает один или несколько обработчиков событий. В модуле asyncio для этих целей используются Coroutine.

Coroutine - это специфическая функция, которая может передать ход выполнения программы другой функции при этом не теряя своего состояния. Coroutine по сути являться расширенным генератором. Одно из больших преимуществ потоков заключается в том, что они не используют много памяти для выполнения. Запомните, что когда вы вызываете функцию Coroutine, она фактически не выполняется, а возвращает объект coroutine, который возможно передать в цикл событий, чтобы он выполнился либо сразу, либо позже.

Еще необходимый термин при использовании asyncio - это Future. Future - это объект, который представляет результат не завершенной работы. Цикл может просматривать Future-объекты и ожидать их окончания. Как только Future-объект прекратит работу, цикл будет выполнен. Asyncio также использует светофоры и блокировки.

Рекомендуем почитать
Документы, вакансии и контакты