"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso conseguir "Fire and Forget" com Async/Await em Python?

Como posso conseguir "Fire and Forget" com Async/Await em Python?

Publicado em 2024-11-21
Navegar:567

How Can I Achieve

Async/Await "Fire and Forget" em Python

Problem Statement

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".

Solução usando asyncio.Task

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.

Tratamento de tarefas pendentes

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.

Cancelamento de tarefas

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.

Tutorial mais recente Mais>

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