Support async dans Celery 5

Celery 5.0, publié en septembre 2020, abandonne Python 2 et introduit un support expérimental des tâches asynchrones. Les workers peuvent exécuter des coroutines async def directement, bénéficiant de l'I/O non bloquant pour les tâches liées au réseau.

Tâche async

python
from celery import Celery
import httpx

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
async def fetch_url(url: str) -> str:
    """Tâche async : récupère une URL sans bloquer."""
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        return response.text[:200]

# Appel identique aux tâches sync
result = fetch_url.delay('https://example.com')
print(result.get(timeout=10))

Sources