Celery 3.0: task queue distribuita per Python

Celery 3.0 (luglio 2012) di Ask Solem Hoel: task queue asincrona distribuita per Python, broker RabbitMQ/Redis, scheduler, workflow (chain, group, chord). Standard de facto per background jobs in Django/Flask.

Open SourceWebR&D CeleryPythonTask QueueAsyncRabbitMQRedisOpen Source

Background jobs per Python

Le applicazioni web producono operazioni lente che non vanno eseguite nel request/response ciclo: invio email, generazione report, batch processing, chiamate API esterne con timeout. Il pattern standard: task queue — l’applicazione inserisce un task in coda, un worker separato lo esegue asincronamente.

Celery, creato da Ask Solem Hoel (Norvegia) nel 2009, è la task queue distribuita standard di Python. La versione 3.0 (luglio 2012) consolida la maturità produttiva. Licenza BSD.

Architettura

[Django/Flask app] → [Broker (RabbitMQ/Redis)] → [Celery workers]

                                              [Result backend]
  • Broker — message queue esterna (RabbitMQ il più solido, Redis il più usato, SQS per AWS)
  • Workers — processi Python che consumano task
  • Result backend — opzionale, store per risultati task (Redis, PostgreSQL, Cassandra)
  • Beat — scheduler per task periodici

Definizione di task

from celery import Celery

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

@app.task
def send_email(to, subject, body):
    # ... invio SMTP ...
    return True

# Uso
send_email.delay('user@example.com', 'Welcome', 'Hi there')
# oppure async con parametri
result = send_email.apply_async(args=['...'], countdown=60, retry=True)

Canvas (workflow primitives)

Celery fornisce primitive di workflow:

  • chain(task1, task2, task3) — sequenziale
  • group(task1, task2, task3) — parallelo
  • chord(group, callback) — parallelo + callback su completamento
  • chunks, map, starmap

Consente orchestrazione complessa senza workflow engine separato.

Uso pratico

  • Email/notification dispatch
  • Report/export generation
  • ETL/data processing
  • Media transcoding
  • ML inference batch
  • Periodic scheduled tasks (cron-like con Celery Beat)

Alternative

  • RQ (Redis Queue) — più semplice, solo Redis
  • Dramatiq — alternativa moderna con API simile
  • Huey — leggero
  • TaskIQ — asyncio-native
  • Apache Airflow — orchestration heavy-duty (DAG)

Nel contesto italiano

Celery è nel backend di quasi ogni applicazione Python aziendale italiana non-trivial — e-commerce, portali PA, SaaS.


Riferimenti: Celery 3.0 (luglio 2012). Ask Solem Hoel. Licenza BSD. Broker: RabbitMQ, Redis, SQS. Canvas primitives: chain, group, chord. Celery Beat scheduler.

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi