Comment puis-je réaliser « Fire and Forget » avec Async/Await en Python ?

Mary-Kate Olsen
Libérer: 2024-11-14 10:21:01
original
859 Les gens l'ont consulté

How Can I Achieve

Async/Await "Fire and Forget" en Python

Énoncé du problème

Async/await fournit une syntaxe pratique pour la programmation asynchrone en Python. Cependant, il existe des situations dans lesquelles nous souhaitons lancer une opération asynchrone sans attendre son achèvement. Ceci est souvent appelé "tirer et oublier".

Solution utilisant asyncio.Task

Python fournit asyncio.Task, qui nous permet de créer une tâche qui s'exécutera en arrière-plan. En utilisant asyncio.Task, nous pouvons réaliser « tirer et oublier » en ajoutant le code suivant à notre script :

import asyncio

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

# Create a task for async_foo()
asyncio.ensure_future(async_foo())
Copier après la connexion

Cela crée une tâche pour async_foo() qui s'exécutera de manière asynchrone sans bloquer le thread principal.

Gestion des tâches en attente

Si notre script se termine avant que toutes les tâches ne soient terminées, nous pouvons utiliser le code suivant pour attendre toutes les tâches en attente :

pending_tasks = asyncio.Task.all_tasks()
loop.run_until_complete(asyncio.gather(*pending_tasks))
Copier après la connexion

Cela garantit que toutes les tâches ont terminé avant la fin du script, évitant ainsi tout avertissement ou erreur.

Annulation des tâches

Dans certains cas, nous ne souhaitons peut-être pas attendre que les tâches soient terminées. Nous pouvons les annuler en utilisant le code suivant :

for task in pending_tasks:
    task.cancel()
    with suppress(asyncio.CancelledError):
        loop.run_until_complete(task)
Copier après la connexion

Cela annule les tâches et supprime les erreurs qui pourraient survenir à la suite de l'annulation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal