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