Introduction
Celery provides distributed task queues for asynchronous task execution.
Basic Setup
# tasks.py
from celery import Celery
app = Celery("tasks", broker="redis://localhost:6379")
@app.task
def send_email(recipient, subject):
# Email sending logic
return {"sent": True, "recipient": recipient}
Running Workers
celery -A tasks worker --loglevel=info
Calling Tasks
# Call asynchronously
result = send_email.delay("user@email.com", "Hello")
result.get(timeout=10) # Wait for result
# With ETA
from datetime import timedelta
send_email.apply_async(
args=["user@email.com"],
eta=datetime.now() + timedelta(hours=1)
)
Periodic Tasks
@app.task
def daily_report():
pass
app.conf.beat_schedule = {
"daily-report": {
"task": "tasks.daily_report",
"schedule": 86400.0, # Every 24 hours
}
}
Practice Problems
- Create basic Celery tasks
- Configure Redis broker
- Schedule periodic tasks
- Handle task retries
- Monitor with Flower