celery-patternslisted
Install: claude install-skill Mattakushi432/Claude-Code-Skills-Custom-DevTools-Pack
# Celery Patterns
## Setup
```python
# celery_app.py
from celery import Celery
from kombu import Queue
celery_app = Celery(
"myapp",
broker="redis://redis:6379/0",
backend="redis://redis:6379/1",
include=["app.tasks.email", "app.tasks.reports"],
)
celery_app.conf.update(
task_serializer="json",
result_serializer="json",
accept_content=["json"],
timezone="UTC",
enable_utc=True,
# Queues
task_queues=[
Queue("high", routing_key="high"),
Queue("default", routing_key="default"),
Queue("low", routing_key="low"),
],
task_default_queue="default",
# Reliability
task_acks_late=True, # ack after completion, not on receipt
task_reject_on_worker_lost=True,
worker_prefetch_multiplier=1, # prevent worker starvation
# Result expiry
result_expires=3600,
)
```
## Task Definition
```python
from celery import shared_task
from celery.utils.log import get_task_logger
from celery.exceptions import MaxRetriesExceededError
logger = get_task_logger(__name__)
@shared_task(
bind=True,
max_retries=3,
default_retry_delay=60,
queue="default",
time_limit=300, # hard kill after 5 min
soft_time_limit=240, # raises SoftTimeLimitExceeded after 4 min
autoretry_for=(TemporaryError,),
retry_backoff=True,
retry_backoff_max=600,
retry_jitter=True,
)
def send_email_task(self, to: str, subject: str, body: str) -> dict:
try:
result = email_service.s