Сообщить об ошибке.

Краткий обзор раздела: Модуль asyncio в Python, асинхронное выполнение кода

Содержание с кратким описанием:

ОБЗОР: Модуль asyncio в Python, асинхронное выполнение кода.
Модуль asyncio - это библиотека для написания асинхронного кода, не связанного с блокирующими вызовами, с использованием синтаксиса async/await. Предоставляет инструменты для создания асинхронных/параллельных приложений с использованием сопрограмм.
Сопрограммы и механизмы их запуска модулем asyncio в Python.
Основной цикл событий можно запустить при помощи функция asyncio.run(). Запуск сопрограмм, могут ждать каких-то результатов запускаются оператором await. Запуск сопрограмм можно осуществлять через создание и планирование задач при помощи функции asyncio.create_task() или asyncio.TaskGroup
Что такое аwaitable объект модуля asyncio в Python.
Существуют три типа awaitable (ожидаемых) объектов: сопрограммы (coroutines), задачи (tasks) и futures объекты.
Функция run() модуля asyncio в Python.
Функция run() модуля asyncio выполнит сопрограмму и вернет результат ее работы, заботясь об управлении циклом событий asyncio (по завершении освободит потребляемые ресурсы), а так же завершит работу асинхронных генераторов.
Менеджер контекста Runner() модуля asyncio в Python.
Новое в Python 3.11. Класс Runner() модуля asyncio представляет собой менеджер контекста, упрощающий вызовы нескольких асинхронных функций в одном контексте.
Функция create_task() модуля asyncio в Python.
Функция create_task() модуля asyncio оборачивает сопрограмму coro в задачу task и планирует ее выполнение в ближайшее время. Возвращает объект Task.
Группы задач TaskGroup() модуля asyncio в Python.
Группы задач TaskGroup() сочетают в себе API создания задач с удобным и надежным способом ожидания завершения всех задач в группе. Представляет собой асинхронный менеджер контекста, содержащий группу задач.
Класс Task() модуля asyncio в Python.
Класс Task() модуля asyncio это объект, который запускает coroutine-сопрограмму Python и похож на объект asyncio.Future. Класс asyncio.Task НЕ потокобезопасный.
Функция sleep() модуля asyncio в Python.
Функция sleep() модуля asyncio всегда приостанавливает текущую задачу на delay секунд, позволяя запускать другие задачи.
Функция gather() модуля asyncio в Python.
Функция gather() модуля asyncio планирует одновременный запуск объектов ожидания в последовательности *aws. Сама так же представляет то же объект ожидания awaitable.
Функция shield() модуля asyncio в Python.
Функция shield() модуля asyncio защищает объект, ожидающий выполнения или каких-то результатов а от отмены методом Task.cancel().
Асинхронный менеджер timeout() модуля asyncio в Python.
Функция timeout() модуля asyncio представляет собой асинхронный диспетчер контекста, который можно использовать для ограничения времени, затрачиваемого на ожидание чего-либо.
Асинхронный менеджер timeout_at() модуля asyncio в Python.
Функция timeout_at() модуля asyncio создает асинхронный контекстный менеджер аналогично asyncio.timeout(), за исключением того, что аргумент when - это абсолютное время ожидания, или None.
Функция wait_for() модуля asyncio в Python.
Функция wait_for() модуля asyncio ждет, пока объект ожидания aw завершится с таймаутом timeout. Функция будет ждать до тех пор, пока объект Future не будет фактически отменен, поэтому общее время ожидания может превысить таймаут.
Функция as_completed() модуля asyncio в Python.
Функция asyncio.as_completed() запускает и ждет выполнения переданных в нее задач/awaitable-объектов, и как только появляются результаты у какой-нибудь задачи, в реальном времени, начинает возвращать их в итераторе.
Функция wait() модуля asyncio в Python.
Функция wait() модуля asyncio одновременно запускает awaitable-объекты (преимущественно задачи Task) из переданного множества aws и производит блокировку выполнения программы до выполнения условия, указанного в аргументе return_when.
Функция to_thread() модуля asyncio в Python.
Функция to_thread() модуля asyncio асинхронно запускает блокирующую цикл событий функцию func в отдельном потоке. Возвращаемая функция сопрограммы в первую очередь предназначена для выполнения функций/методов, связанных с вводом/выводом, которые могут заблокировать цикл событий, если бы они выполня
Функция run_coroutine_threadsafe() модуля asyncio в Python.
Функция run_coroutine_threadsafe() модуля asyncio отправляет сопрограмму coro в заданный цикл событий loop. Функция поточно-ориентирована. Функция asyncio.run_coroutine_threadsafe() предназначена для вызова сопрограмм в потоке, отличным от того, в котором запущен основной цикл событий.
Функции current_task() и all_tasks() модуля asyncio в Python.
Функция asyncio.current_task() возвращает текущий запущенный экземпляр Task. Функция asyncio.all_tasks() возвращает множество еще не завершенных задач.
Использование очереди asyncio.Queue в Python.
Очереди queues модуля asyncio разработаны так, чтобы API был похож на модуля queue. Очереди можно использовать для обмены данными между задачами или распределения нагрузки между несколькими параллельными задачами.
Примитивы синхронизации задач в asyncio в Python.
Примитивы синхронизации модуля asyncio очень похожи на примитивы синхронизации модуля threading с двумя важными оговорками: примитивы синхронизации asyncio не являются потокобезопасными; методы этих примитивов синхронизации не принимают аргумент таймаута.
Запуск внешних программ из кода asyncio в Python.
Класс asyncio.subprocess.Process это объект, который охватывает процессы ОС, созданные функциями asyncio.create_subprocess_exec() и asyncio.create_subprocess_shell(). Представляет собой обертку высокого уровня, которая позволяет взаимодействовать с субпроцессами и следить за их завершением.
Работа с сетевыми соединениями модуля asyncio в Python.
Сетевые сокет соединениями и сервера модуля asyncio - это высокоуровневые примитивы с поддержкой синтаксиса async/await для работы с сетевыми подключениями. Рассмотренные функции позволяют отправлять и получать данные без использования обратных вызовов или низкоуровневых протоколов и транспортов.
Объект Future модуля asyncio Python и связанные функции.
Объекты Future используются для соединения низкоуровневого кода, основанного на обратном вызове, с высокоуровневым кодом, основанном на синтаксисе async/await.
Создание и получение текущего цикла событий, модуль asyncio в Python.
Объект цикла событий, своими методами запускает асинхронные задачи и обратные вызовы, выполняют сетевые операции ввода-вывода. Разработчики приложений, для выполнения асинхронных задач должны использовать высокоуровневые функции модуля asyncio, такие как asyncio.run().
Создание, запуск и остановка цикла событий модуля asyncio в Python.
В разделе рассмотрены методы объекта цикла событий, связанные с его запуском и остановкой. Прежде чем запускать и останавливать цикл событий, его необходимо создать или получить функциями, описанными в разделе "Создание и получение текущего цикла событий".
Планирование обратных вызовов из цикла событий asyncio в Python.
В разделе рассмотрены *методы низкоуровнего API* цикла событий, позволяющие планировать обратные вызовы в асинхронном коде с применением модуля asyncio.
Создание Future и Task из цикла событий asyncio в Python.
В разделе рассмотрены методы низкоуровнего API цикла событий, позволяющие создавать задачи и объекты будущих результатов в асинхронном коде с применением модуля asyncio.
Немедленное выполнение задач модулем asyncio в Python.
Новое в Python 3.12. Функция asyncio.eager_task_factory() представляет собой фабрику задач для быстрого выполнения задач, а функция asyncio.eager_task_factory() создает фабрику готовых задач, аналогичную asyncio.eager_task_factory(), используя предоставленный custom_task_constructor.
Создание пулов потоков и процессов из цикла событий asyncio в Python.
В разделе рассмотрены методы низкоуровнего API модуля asyncio, позволяющие запускать файловые операции (например, ведение журнала), блокирующие цикл событий - в пуле потоков, а операции, связанные с процессором, которые так же могут заблокировать цикл событий - в пуле процессов.
Создание TCP, UDP и Unix соединений из цикла событий asyncio в Python.
В разделе рассмотрены методы цикла событий модуля asyncio, при помощи которых можно создать и открыть потоковые stream соединения следующих видов TCP, UDP и Unix.
Создание сетевых серверов из цикла событий asyncio в Python.
В разделе рассмотрены методы цикла событий модуля asyncio, при помощи которых можно создавать асинхронные сетевые сервера следующих видов TCP-сервер, Unix-socket сервер.
Создание субпроцесса из цикла событий asyncio в Python.
В Windows цикл событий asyncio реализация по умолчанию ProactorEventLoop поддерживает подпроцессы, а реализация SelectorEventLoop - нет. В обычном коде async/await рассмотрите возможность использования вместо них вспомогательных функций высокого уровня asyncio.create_subprocess_shell() и asyncio.cr
Работа с сокетами напрямую из цикла событий asyncio в Python.
В основном, реализации протокола, использующие API на основе транспорта, такие как loop.create_connection() и loop.create_server(), быстрее, чем реализации, которые работают с сокетами напрямую. НО работать с объектами сокетов напрямую удобнее.
Передача файлов из цикла событий asyncio в Python.
Асинхронный метод низкоуровнего API цикла событий loop.sendfile() отправляет файл file через транспорт transport. Возвращает общее количество отправленных байтов. Представляет собой сопрограмму. Метод использует высокопроизводительную функцию os.sendfile(), если она доступна.
Наблюдение за дескрипторами файлов из цикла событий asyncio в Python.
В разделе рассмотрены низкоуровневые методы цикла событий модуля asyncio, при помощи которых можно наблюдать за доступностью чтения/записи дескриптора файла.
DNS запросы из цикла событий asyncio в Python.
В разделе рассмотрены низкоуровневые методы цикла событий модуля asyncio, при помощи которых можно создавать асинхронные DNS запросы из низкоуровнего кода.
Сигналы Unix в циклах событий asyncio в Python.
В разделе рассмотрены низкоуровневые методы модуля asyncio, при помощи которых можно регистрировать и распространять сигналы Unix в цикла событий основного потока.
Параллелизм и многопоточность в цикле событий asyncio в Python.
Для обработки сигналов и выполнения подпроцессов, цикл событий должен выполняться в основном потоке. Метод loop.run_in_executor() можно использовать с concurrent.futures.ThreadPoolExecutor для выполнения блокирующего кода в другом потоке ОС без блокировки основного потока ОС.
Объекты Transport и Protocol в цикле событий asyncio в Python.
Транспорт (transport) связан с тем, как передаются байты, в то время как протокол (protocol) определяет, какие байты передать (и в некоторой степени, когда).
Включение режима отладки в asyncio в Python.
По умолчанию модуль asyncio работает в режиме *production*. Для облегчения разработки в asyncio есть режим отладки. Есть несколько способов включить режим отладки asyncio
Обработка исключений в цикле событий модуля asyncio в Python.
В разделе рассмотрены *методы низкоуровнего API* цикла событий, позволяющие настроить обработку исключений в асинхронном коде с применением модуля asyncio.
Исключения модуля asyncio Python.
На данной странице представлены исключения встроенные в модуль asyncio.