"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo lograr "Disparar y olvidar" con Async/Await en Python?

¿Cómo puedo lograr "Disparar y olvidar" con Async/Await en Python?

Publicado el 2024-11-21
Navegar:331

How Can I Achieve

Async/Await "Dispara y olvida" en Python

Declaración del problema

Async/await proporciona una sintaxis conveniente para la programación asincrónica en Python. Sin embargo, hay situaciones en las que queremos iniciar una operación asincrónica sin esperar a que finalice. Esto a menudo se conoce como "disparar y olvidar".

Solución usando asyncio.Task

Python proporciona asyncio.Task, que nos permite crear una tarea que se ejecutará en segundo plano. Usando asyncio.Task, podemos lograr "disparar y olvidar" agregando el siguiente código a nuestro script:

import asyncio

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

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

Esto crea una tarea para async_foo() que se ejecutará de forma asíncrona sin bloquear el hilo principal.

Manejo de tareas pendientes

Si nuestro script se completa antes de que finalicen todas las tareas, podemos usar el siguiente código para esperar todas las tareas pendientes:

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

Esto garantiza que todas las tareas se hayan completado antes de que salga el script, evitando advertencias o errores.

Cancelación de tareas

En algunos casos, es posible que no queramos esperar a que se completen las tareas. Podemos cancelarlos usando el siguiente código:

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

Esto cancela las tareas y suprime cualquier error que pueda surgir como resultado de la cancelación.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3