# Celery
---
# Plan
- **Qu'est ce que Celery**
- Tâche
- Worker
- Broker et Queue
- Lancer une tâche
- Débugger Celery
- La parallélisation et les sous-tâches
- Les barres de progression dans Celery
## Qu'est ce que Celery
### Tâche
```python
from celery import shared_task
@shared_task(name="ptf.tasks.test_task")
def test_task():
print("toto")
```
Une tâche instanciée contient des métadonnées
> /!\ Faire la distinction entre tâche "instanciée" et tâche "déclarée"
### Worker
```bash
$ celery -A ptf_tools worker
```
### Broker et Queue
```bash
$ systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ Messaging Server
Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-09-07 06:32:54 CEST; 6 months 21 days ago
Main PID: 2939178 (beam.smp)
Tasks: 36 (limit: 11885)
Memory: 149.3M
CPU: 1d 13h 28min 48.791s
CGroup: /system.slice/rabbitmq-server.service
├─2939178 /usr/lib/erlang/erts-13.1.5/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sbwtdio none -- -root /usr/lib/erlang -bindir /usr/lib/erlang/erts-13.1.5/bin -progname erl -- -home /var/lib/>
├─2939188 erl_child_setup 65536
├─2939260 /usr/lib/erlang/erts-13.1.5/bin/inet_gethost 4
├─2939261 /usr/lib/erlang/erts-13.1.5/bin/inet_gethost 4
└─2939264 /bin/sh -s rabbit_disk_monitor
Sep 07 06:32:49 mathdoc-new-trammel.u-ga.fr systemd[1]: Starting rabbitmq-server.service - RabbitMQ Messaging Server...
Sep 07 06:32:54 mathdoc-new-trammel.u-ga.fr systemd[1]: Started rabbitmq-server.service - RabbitMQ Messaging Server.
```
---
# Plan
- Qu'est ce que Celery
- **Lancer une tâche**
- Exemple simple
- Derrière les rideaux...
- Débugger Celery
- La parallélisation et les sous-tâches
- Les barres de progression dans Celery
### Exemple simple
Prérequis : un worker et un broker lancés
```python
from celery import shared_task
@shared_task(name="crawler.tasks.test_task")
def test_task(self):
print("TEST TASK")
# synchrone dans le thread actuel
test_task()
# asynchrone dans un worker
test_task.delay()
```
> /!\ Pour le worker et django, les fichiers de code sont les mêmes...
### Derrière les rideaux...
## Concepts avancés
- AsyncResult
- Signature
- Chain
- Group
- Chord
https://docs.celeryq.dev/en/main/reference/celery.html