«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу добиться «выстрелить и забыть» с помощью Async/Await в Python?

Как я могу добиться «выстрелить и забыть» с помощью Async/Await в Python?

Опубликовано 21 ноября 2024 г.
Просматривать:558

How Can I Achieve

Async/Await «Выстрелил и забыл» в Python

Постановка задачи

Async/await предоставляет удобный синтаксис для асинхронного программирования на Python. Однако бывают ситуации, когда мы хотим инициировать асинхронную операцию, не дожидаясь ее завершения. Это часто называют «выстрелил и забыл».

Решение с использованием asyncio.Task

Python предоставляет asyncio.Task, который позволяет нам создавать задачи, которые будут выполняться в фоновом режиме. Используя asyncio.Task, мы можем добиться принципа «выстрелил и забыл», добавив в наш скрипт следующий код:

import asyncio

async def async_foo():
    # Do some asynchronous stuff here

# Create a task for async_foo()
asyncio.ensure_future(async_foo())

Это создает задачу для async_foo(), которая будет выполняться асинхронно без блокировки основного потока.

Обработка ожидающих задач

Если наш скрипт завершается до завершения всех задач, мы можем использовать следующий код, чтобы дождаться всех ожидающих выполнения задачи:

pending_tasks = asyncio.Task.all_tasks()
loop.run_until_complete(asyncio.gather(*pending_tasks))

Это гарантирует, что все задачи будут завершены до завершения работы скрипта, предотвращая появление предупреждений или ошибок.

Отмена задач

В некоторых случаях мы можем не захотеть ждать завершения задач. Мы можем отменить их, используя следующий код:

for task in pending_tasks:
    task.cancel()
    with suppress(asyncio.CancelledError):
        loop.run_until_complete(task)

Это отменяет задачи и подавляет любые ошибки, которые могут возникнуть в результате отмены.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3