Imagine : Un utilisateur s'inscrit. Tu dois lui envoyer un email de bienvenue. Si l'envoi de mail prend 3 secondes, l'utilisateur va attendre 3 secondes devant une page blanche. C'est nul.
La solution :
- L'utilisateur clique sur "S'inscrire".
- Flask répond "OK !" tout de suite.
- En arrière-plan, un "ouvrier" (Worker) envoie l'email tranquillement.
Cet ouvrier, c'est Celery.
Architecture
- Flask : Le producteur (donne les ordres).
- Redis : Le courtier (la boîte aux lettres où on pose les ordres).
- Celery Worker : L'ouvrier (qui prend les ordres et bosse).
Exemple
tasks.py :
from celery import Celery
celery = Celery('tasks', broker='redis://localhost:6379/0')
@celery.task
def send_email(email):
# ... code pour envoyer le mail ...
import time
time.sleep(5)
print(f"Email envoyé à {email} !")
app.py :
from tasks import send_email
@app.route('/register', methods=['POST'])
def register():
# ...
# On appelle la tâche avec .delay()
send_email.delay('bob@mail.com')
return "Inscription réussie ! (L'email arrive...)"
L'utilisateur n'attend pas. L'expérience est fluide.