appeler france agence web Parler à un expert

Article : Celery, librairie Python pour les tâches asynchrones

Le module celery de python permet de construire des applications réactives grâce à son système d'exécution de tâches asynchrones.



Celery (Python), qu'est-ce que c'est ?

Celery est une bibliothèque Python permettant de définir ce que l'on appelle des tâches, afin que ces dernière puissent être exécutées de manière asynchrone par des "workers" ou "consumers" qui tournent, en continue ou à des plages d'horaires définies (crontab par exemple), sur un serveur acceptant le protocole AMQP comme RabbitMQ server ou SQS d'Amazon Web Service.
Les tâches celery ne sont ni plus ni moins des commandes python (fonctions, méthodes, classes...) déclenchées par des requêtes HTTP dans le cadre de webservice, ou par d'autres moyens comme l'exécution manuelle, évènement sur un logiciel et d'autres encore.
Ainsi, coupler cette bibliothèque avec un broker AMQP permet de construire des applications réactives et robustes.
La bibliothèque Celery intègre un système de référence basé sur des UUID pour garder en mémoire et pouvoir récupérer le résultat de la tâche asynchrone qui a été déclenchée.

Celery (Python), qu'est-ce que c'est ?


Comment et pourquoi utiliser Celery ?

Pour utiliser Celery, vous devez au préalable effectuer plusieurs réglages. Avant toute chose, vous devez configurer et installer un Broker AMQP comme RabbitMQ par exemple.
Puis vous devez installer le module celery dans votre environnement de développement (virtual env ou autre) et configurer votre application pour qu'elle intègre cette librairie. La documentation de Celery vous en dira un peu plus sur l'installation et la paramétrage.
Puis, après que tout a été configuré, vous êtes prêt à écrire vos premières tâches asynchrones. Pour cela, vous pouvez simplement décorer votre fonction, class ou commande par le décorateur @shared_task(bind=True/False, name="a_name") ce qui permettra de définir que tel ou tel commande python doit être une tâche. Le paramètre bind sert à indiquer si au sein de votre méthode ou fonction vous avez besoin d'accéder à l'objet python de tâche asynchrone, afin éventuellement d'analyser ou stocker des informations utiles à celle-ci, de la passer en référence à d'autres commandes ou que sais-je.
Puis, vous êtes ainsi prêt à lancer et exécuter vos tâches de manière asynchrone, pour ce faire, quand vous appelez cette méthode ou fonction, disons qu'elle s'appelle foo et qu'elle a la signature suivante :


@shared_task(bind=False)
def foo(bar, toto):
       make_some_cool_and_long_stuff()

alors, lors de l'appel de foo vous devrez appliquer une méthode au dessus, nommée delay. Autrement dit, si une autre fonction appelle cette tâche par exemple, vous allez devoir exécuter la commande:
 foo.delay(bar=bar_arg, toto=toto_arg)

. Et voilà, la tâche a été appelée d'une manière à ce qu'elle puisse être exécutée de manière asynchrone ! Maintenant, si vous déclenchez manuellement le worker (thread) de votre serveur AMQP, vous verrez cette dernière s'exécuter comme une fonction python classique. Magique ! Bien evidemment, pour des usages avancés et plus complexes il est nécessaire d'aller fouiller dans les rouages du module celery. Nous détaillerons plusieurs points dans de futurs articles.
En conclusion, utiliser Celery permet non seulement de ne pas ralentir le serveur (machine) hébergeant l'application Python, mais aussi de ne pas attendre pour avoir le résultat d'une commande coûteuse en temps et en complexité mais de le récupérer après grâce au système de référence.

Comment et pourquoi utiliser Celery ?


Besoin de plus de détail sur "Celery, librairie Python pour les tâches asynchrones" ?

Vous pouvez nous contacter par téléphone, ou par mail pour plus de détail concernant cet article. Nous vous proposons également des formations pour Développement Python à des prix défiant toute concurrence, afin que vous deveniez un vrai professionnel du digital.