Async/await fornece uma sintaxe conveniente para programação assíncrona em Python. Porém, existem situações em que queremos iniciar uma operação assíncrona sem esperar pela sua conclusão. Isso geralmente é chamado de "disparar e esquecer".
Python fornece asyncio.Task, que nos permite criar uma tarefa que será executada em segundo plano. Usando asyncio.Task, podemos conseguir "disparar e esquecer" adicionando o seguinte código ao nosso script:
import asyncio async def async_foo(): # Do some asynchronous stuff here # Create a task for async_foo() asyncio.ensure_future(async_foo())
Isso cria uma tarefa para async_foo() que será executada de forma assíncrona sem bloquear o thread principal.
Se nosso script for concluído antes que todas as tarefas sejam concluídas, podemos usar o seguinte código para aguardar todas as tarefas pendentes:
pending_tasks = asyncio.Task.all_tasks() loop.run_until_complete(asyncio.gather(*pending_tasks))
Isso garante que todas as tarefas sejam concluídas antes da saída do script, evitando avisos ou erros.
Em alguns casos, podemos não querer esperar a conclusão das tarefas. Podemos cancelá-los usando o seguinte código:
for task in pending_tasks: task.cancel() with suppress(asyncio.CancelledError): loop.run_until_complete(task)
Isso cancela as tarefas e suprime quaisquer erros que possam ser gerados como resultado do cancelamento.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3