Django āđāļĨāļ° Celery: āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļēāļāđāļāļāļāļ°āļāļīāļāđāļāļĢāļāļąāļŠāđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ 2026
āļāļđāđāļĄāļ·āļ Django Celery āļāļāļąāļāļŠāļĄāļāļđāļĢāļāđāļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļĢāļīāļ, task routing, āļāļēāļĢāļāļąāđāļāđāļ§āļĨāļē Celery Beat, āļāļēāļĢāļāļģāļŦāļāļāļāđāļē production āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāđāļāļāļāļīāļ 2026

Django āđāļĨāļ° Celery āđāļāđāļāļĢāļēāļāļāļēāļāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļēāļāđāļāļāļāļ°āļāļīāļāđāļāļĢāļāļąāļŠāđāļāđāļāļāļāļĨāļīāđāļāļāļąāļāđāļ§āđāļ Python āļāđāļ§āļĒ Celery 5.6 āđāļĨāļ° Django 6.0 āļāļĩāđāļāļāļāļāļąāļāđāļāļāļŠāļģāļāļąāļāđāļāļāļĩ 2026 āļāļ§āļēāļĄāđāļāđāļēāđāļāđāļāļĩāđāļĒāļ§āļāļąāļāļāļīāļ§āļāļēāļāđāļāļāļāļĢāļ°āļāļēāļĒāļĒāļąāļāļāļāđāļāđāļāļāļąāļāļĐāļ°āļŠāļģāļāļąāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ backend āđāļĨāļ°āļĢāļ°āļāļ production
Celery āđāļĒāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāļāļĩāđāđāļāđāđāļ§āļĨāļēāļāļēāļāļāļāļāļāļēāļāļ§āļāļāļĢ request-response Django view āļŠāđāļāļāļēāļāđāļāļĒāļąāļ message broker (Redis āļŦāļĢāļ·āļ RabbitMQ) āđāļĨāļ° worker process āđāļĒāļāļāđāļēāļāļŦāļēāļāļāļ°āļāļģāđāļāļīāļāļāļēāļĢāđāļāļāļāļ°āļāļīāļāđāļāļĢāļāļąāļŠ āļĢāļđāļāđāļāļāļāļĩāđāļĢāļāļāļĢāļąāļāļāļēāļĢāļŠāđāļāļāļĩāđāļĄāļĨ āļāļēāļĢāļŠāļĢāđāļēāļāļĢāļēāļĒāļāļēāļ āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļĢāļđāļāļ āļēāļ āđāļĨāļ°āļ āļēāļĢāļ°āļāļēāļāđāļāļāđāļāļēāļĄāļāļĩāđāļāļāļāļīāļāļ°āļāļĨāđāļāļāļāļđāđāđāļāđ
āļ§āļīāļāļĩāļāļĩāđ Celery āļāļģāļāļēāļāļĢāđāļ§āļĄāļāļąāļ Django
Celery āļāļģāļāļēāļāđāļāđāļ process āļāļīāļŠāļĢāļ°āļāļĩāđāđāļāđ codebase āļĢāđāļ§āļĄāļāļąāļāđāļāļĢāđāļāļāļāđ Django āļāļēāļĢāļĢāļ§āļĄāļĢāļ°āļāļāļāļēāļĻāļąāļĒāļŠāļēāļĄāļāļāļāđāļāļĢāļ°āļāļāļ: āđāļāļāļāļĨāļīāđāļāļāļąāļ Django (producer), message broker (Redis āļŦāļĢāļ·āļ RabbitMQ) āđāļĨāļ° Celery worker āļŦāļāļķāđāļāļāļąāļ§āļāļķāđāļāđāļ (consumer) āđāļĄāļ·āđāļ Django view āđāļĢāļĩāļĒāļ .delay() āļŦāļĢāļ·āļ .apply_async() āļāļēāļāļāļ°āļāļđāļ serialize āđāļĨāļ°āļŠāđāļāđāļāļĒāļąāļāļāļīāļ§ broker Worker āļāļ°āļŦāļĒāļīāļāļāļēāļāļĄāļēāđāļĨāļ°āļāļģāđāļāļīāļāļāļēāļĢāļāļąāļāļāđāļāļąāļāđāļ process āļāļāļāļāļąāļ§āđāļāļ
āļāļēāļĢāļāļąāđāļāļāđāļēāđāļĢāļīāđāļĄāļāđāļāļāđāļ§āļĒāđāļĄāļāļđāļĨ celery.py āļāļĩāđ root āļāļāļāđāļāļĢāđāļāļāļāđ Django:
# myproject/celery.py
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()āļāļēāļĢāđāļĢāļĩāļĒāļ autodiscover_tasks() āļāļ°āļŠāđāļāļāļāļļāļāđāļāļ Django āļāļĩāđāļāļīāļāļāļąāđāļāđāļāļ·āđāļāļāđāļāļŦāļēāđāļĄāļāļđāļĨ tasks.py āđāļĨāļ°āļĨāļāļāļ°āđāļāļĩāļĒāļāļāļąāļāļāđāļāļąāļāļāļĩāđāļāļāđāļāđāļāļāđāļ§āļĒ decorator āļāļąāđāļāļŦāļĄāļāđāļāđāļāļāļēāļ Celery āđāļāļĒāļāļąāļāđāļāļĄāļąāļāļī
āđāļ settings.py broker āđāļĨāļ° result backend āļāļđāļāļāļģāļŦāļāļāļāđāļē:
# myproject/settings.py
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/1'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'Redis āļāļģāļŦāļāđāļēāļāļĩāđāļŠāļāļāļāļĒāđāļēāļāļāļąāđāļ broker āđāļĨāļ° result backend āđāļāļāļēāļĢ deploy Django āļŠāđāļ§āļāđāļŦāļāđ RabbitMQ āļĒāļąāļāļāļāđāļāđāļāļāļąāļ§āđāļĨāļ·āļāļāļāļĩāđāļāļĩāļāļ§āđāļēāļŠāļģāļŦāļĢāļąāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļāđāļāļāļāļēāļĢ quorum queues āļŦāļĢāļ·āļ routing āļāļąāđāļāļŠāļđāļ āļāļķāđāļāđāļāđāļāļāļĩāđāļāļāļĢāđāļāļĩāđāļĢāļāļāļĢāļąāļāđāļāđāļĄāļĢāļđāļāđāļāļāļāļąāđāļāđāļāđ Celery 5.5
āļāļēāļĢāđāļāļĩāļĒāļāđāļĨāļ°āļŠāđāļāļāļēāļ Celery
āļāļēāļ Celery āļāļ·āļāļāļąāļāļāđāļāļąāļ Python āļāļāļāļīāļāļĩāđāļāļāđāļāđāļāļāđāļ§āļĒ @shared_task Decorator shared_task āļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļāļēāļĢ hardcode instance āļāļāļ Celery app āļāļģāđāļŦāđāļāļēāļāļŠāļēāļĄāļēāļĢāļāļāļģāļāļĨāļąāļāļĄāļēāđāļāđāđāļŦāļĄāđāđāļāđāđāļāđāļāļ Django āļāđāļēāļāđ
# orders/tasks.py
from celery import shared_task
from django.core.mail import send_mail
from orders.models import Order
@shared_task(bind=True, max_retries=3, default_retry_delay=60)
def send_order_confirmation(self, order_id: int) -> str:
"""Send confirmation email for a completed order."""
try:
order = Order.objects.select_related('user').get(id=order_id)
send_mail(
subject=f'Order #{order.id} Confirmed',
message=f'Your order totaling {order.total} has been confirmed.',
from_email='noreply@example.com',
recipient_list=[order.user.email],
)
return f'Email sent for order {order_id}'
except Order.DoesNotExist:
return f'Order {order_id} not found'
except Exception as exc:
# Retry on transient failures (SMTP timeout, etc.)
raise self.retry(exc=exc)āļĄāļĩāļŠāļēāļĄāļĢāļđāļāđāļāļāļŠāļģāļāļąāļāļāļĩāđāļāļĢāļēāļāļāļāļĩāđāļāļĩāđ āļāļĢāļ°āļāļēāļĢāđāļĢāļ bind=True āđāļŦāđāļāļēāļāđāļāđāļēāļāļķāļ self āđāļāļ·āđāļāđāļāļīāļāđāļāđāļāļēāļ retry āļāļĢāļ°āļāļēāļĢāļāļĩāđāļŠāļāļ āļāļąāļāļāđāļāļąāļāļĢāļąāļ integer order_id āđāļāļāļāļĩāđāļāļ°āđāļāđāļāļāļāļāđāļāļāļāđ ORM āđāļāļ·āđāļāļāļāļēāļ instance āļāļāļ model āđāļĄāđāļŠāļēāļĄāļēāļĢāļ serialize āđāļāđāļāļĒāđāļēāļāļāđāļēāđāļāļ·āđāļāļāļ·āļāļāđāļēāļĄāļāļāļāđāļāļ process āļāļĢāļ°āļāļēāļĢāļāļĩāđāļŠāļēāļĄ self.retry(exc=exc) āļāļ°āļŠāđāļāļāļēāļāļāļĨāļąāļāđāļāđāļēāļāļīāļ§āļāđāļ§āļĒ exponential backoff āđāļĄāļ·āđāļāđāļāļīāļāļāļ§āļēāļĄāļĨāđāļĄāđāļŦāļĨāļ§āļāļąāđāļ§āļāļĢāļēāļ§
āļāļēāļĢāļŠāđāļāļāļēāļ Django view:
# orders/views.py
from orders.tasks import send_order_confirmation
def complete_order(request, order_id):
# ... process payment, update order status ...
send_order_confirmation.delay(order_id)
return redirect('order_success', order_id=order_id)āļāļēāļĢāđāļĢāļĩāļĒāļ .delay() āļāļ° return āļāļąāļāļāļĩ āļāļđāđāđāļāđāđāļŦāđāļāļŦāļāđāļēāļŠāļģāđāļĢāđāļāđāļāļāļāļ°āļāļĩāđāļāļēāļāļāļĩāđāļĄāļĨāļāļģāļāļēāļāļāļĒāļđāđāđāļāļ·āđāļāļāļŦāļĨāļąāļ
Task Routing āđāļĨāļ°āļāļēāļĢāļāļąāļāļāļēāļĢāļāļīāļ§
āļĢāļ°āļāļ production āđāļĄāđāļāļ§āļĢāļŠāđāļāļāļēāļāļāļąāđāļāļŦāļĄāļāđāļāļĒāļąāļāļāļīāļ§ default āđāļāļĩāļĒāļ§ āļāļēāļāļŠāļĢāđāļēāļāļĢāļēāļĒāļāļēāļāļāļĩāđāļāđāļēāļŠāļēāļĄāļēāļĢāļāļāļģāđāļŦāđāļāļēāļāđāļāđāļāđāļāļ·āļāļāļāļĩāđāđāļĢāđāļ§āļāļēāļāđāļāļĨāļāļāļĢāļąāļāļĒāļēāļāļĢāļŦāļēāļāđāļāđ worker pool āđāļāļĩāļĒāļ§āļāļąāļ Celery āđāļāđāļāļąāļāļŦāļēāļāļĩāđāļāđāļ§āļĒ task routing
# myproject/settings.py
CELERY_TASK_ROUTES = {
'orders.tasks.send_order_confirmation': {'queue': 'notifications'},
'reports.tasks.generate_monthly_report': {'queue': 'reports'},
'images.tasks.resize_upload': {'queue': 'media'},
}āļāļēāļāļāļąāđāļ worker āļāļ°āđāļĢāļīāđāļĄāļāđāļāļāļēāļĄāļāļīāļ§:
# Start notification worker (fast tasks, high concurrency)
celery -A myproject worker -Q notifications -c 8 --loglevel=info
# Start report worker (slow tasks, limited concurrency)
celery -A myproject worker -Q reports -c 2 --loglevel=info
# Start media worker (CPU-bound, prefork pool)
celery -A myproject worker -Q media -c 4 -P prefork --loglevel=infoāļāļēāļĢāđāļĒāļāļāļĩāđāļāđāļāļāļāļąāļāļāļēāļĢāđāļĒāđāļāļāļīāļāļāļĢāļąāļāļĒāļēāļāļĢ Worker āđāļāđāļāđāļāļ·āļāļāļĢāļāļāļĢāļąāļ throughput āļŠāļđāļāļāđāļ§āļĒ 8 thread āļāļĢāđāļāļĄāļāļąāļ āđāļāļāļāļ°āļāļĩāđ worker āļĢāļēāļĒāļāļēāļāļĢāļąāļāđāļāļĩāļĒāļ 2 āļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāļ·āđāļāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļŦāļāđāļ§āļĒāļāļ§āļēāļĄāļāļģāļŦāļĄāļāļāļēāļāļāļēāļĢ query dataset āļāļāļēāļāđāļŦāļāđ
āļāļĢāđāļāļĄāļāļĩāđāļāļ°āļāļīāļāļīāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ Django āđāļĨāđāļ§āļŦāļĢāļ·āļāļĒāļąāļāļāļĢāļąāļ?
āļāļķāļāļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāđāļāļāđāļāđāļāļāļ, flashcards āđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āļāļēāļāļāļēāļĄāļāļģāļŦāļāļāđāļ§āļĨāļēāļāđāļ§āļĒ Celery Beat
Celery Beat āļāļ·āļ scheduler āđāļāļāļąāļ§āļŠāļģāļŦāļĢāļąāļāļāļēāļāļāļĩāđāļāļģāļāđāļģ āļĄāļąāļāļāļģāļāļēāļāđāļāđāļ process āđāļĒāļāļāļĩāđāļŠāđāļāļāļēāļāđāļāļĒāļąāļ broker āļāļēāļĄāļāđāļ§āļāđāļ§āļĨāļēāļāļĩāđāļāļģāļŦāļāļ
# myproject/settings.py
from celery.schedules import crontab
CELERY_BEAT_SCHEDULE = {
'cleanup-expired-sessions': {
'task': 'accounts.tasks.cleanup_expired_sessions',
'schedule': crontab(hour=3, minute=0), # Daily at 3 AM UTC
},
'sync-inventory': {
'task': 'inventory.tasks.sync_external_inventory',
'schedule': 300.0, # Every 5 minutes
},
'generate-weekly-digest': {
'task': 'notifications.tasks.send_weekly_digest',
'schedule': crontab(hour=9, minute=0, day_of_week='monday'),
},
}Beat āđāļĢāļīāđāļĄāļāđāļāļāļĢāđāļāļĄāļāļąāļ worker:
celery -A myproject beat --loglevel=infoāļāđāļāļāļīāļāļāļĨāļēāļāļāļĩāđāļāļāļāđāļāļĒāđāļ production: āļāļēāļĢāļĢāļąāļ Beat āļŦāļĨāļēāļĒ instance āļāļģāđāļŦāđāđāļāļīāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļāļāđāļģ āļāļ§āļĢāļĄāļĩāđāļāļĩāļĒāļ process Beat āđāļāļĩāļĒāļ§āļāđāļ deployment āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĒāđāļēāļ django-celery-beat āļāļąāļāđāļāđāļāļāļēāļĢāļēāļāđāļ§āļĨāļēāđāļāļāļēāļāļāđāļāļĄāļđāļĨ āļāļģāđāļŦāđāļŠāļēāļĄāļēāļĢāļāđāļāđāđāļāđāļāđāļāļāļ°āļĢāļąāļāļāđāļēāļ Django admin
āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāđāļĨāļ° Observability āļāđāļ§āļĒ Flower
Flower āđāļŦāđ dashboard āđāļ§āđāļāđāļāļ real-time āļŠāļģāļŦāļĢāļąāļāļāļĢāļ§āļāļŠāļāļ worker, āļāļēāļ āđāļĨāļ°āļāļīāļ§āļāļāļ Celery Flower āđāļŠāļāļāļāļąāļāļĢāļēāļāļ§āļēāļĄāļŠāļģāđāļĢāđāļāļāļāļāļāļēāļ āđāļ§āļĨāļēāļāļģāđāļāļīāļāļāļēāļĢ āļāļ§āļēāļĄāļĨāļķāļāļāļāļāļāļīāļ§ āđāļĨāļ°āļŠāļāļēāļāļ° worker
# Install and run Flower
pip install flower
celery -A myproject flower --port=5555āđāļ production āļāļąāļ§āļāļĩāđāļ§āļąāļāļāļēāļ Flower āļāļ§āļĢāļāļđāļāļŠāđāļāđāļāļĒāļąāļāļĢāļ°āļāļāđāļāđāļāđāļāļ·āļāļ āļāļ§āļēāļĄāļĨāļķāļāļāļāļāļāļīāļ§āļāļĩāđāđāļāļīāđāļĄāļāļķāđāļāļāļĢāđāļāļĄāļāļēāļāļāļĩāđāļāđāļēāļāļāđāļāļāļĩāđāļāļąāļāļŦāļēāļāđāļēāļāļāļ§āļēāļĄāļāļļ worker āļāļąāļāļĢāļē retry āļāļĩāđāļŠāļđāļāđāļāļāļēāļāđāļāļāļēāļ°āļāļĩāđāđāļāļāļĩāđāļāļ§āļēāļĄāđāļĄāđāđāļŠāļāļĩāļĒāļĢāļāļāļāļāļĢāļīāļāļēāļĢāļ āļēāļĒāļāļāļ
Celery 5.6 āļĒāļąāļāđāļāļ°āļāļģāļāļēāļĢāļāļĢāļąāļāļāļĢāļļāļ structured logging āļāļĩāđāļāļģāļāļēāļāļĢāđāļ§āļĄāļāļąāļāļāļąāļ§āļĢāļ§āļāļĢāļ§āļĄ JSON log āđāļāđāļ Datadog āļŦāļĢāļ·āļ ELK stack āđāļŦāđāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļēāļĢ debug āļāļĩāļāļķāđāļ 30% āļāļēāļĄāļāļąāļāļāļķāļāļāļēāļĢāđāļāļĒāđāļāļĢāđ
Framework āļāļēāļāđāļāļāļąāļ§āļāļāļ Django 6.0 āđāļāļĩāļĒāļāļāļąāļ Celery
Django 6.0 āđāļāļīāļāļāļąāļ§ framework āļāļēāļāđāļāļ·āđāļāļāļŦāļĨāļąāļāđāļāļ native āļāļģāđāļŦāđāđāļāļīāļāļāļģāļāļēāļĄāļ§āđāļē Celery āļĒāļąāļāļāļģāđāļāđāļāļŦāļĢāļ·āļāđāļĄāđ āļāļģāļāļāļāļāļķāđāļāļāļĒāļđāđāļāļąāļāļāļĢāļāļĩāļāļēāļĢāđāļāđāļāļēāļ
Framework āļāļēāļāđāļāļāļąāļ§āļāļāļ Django āļĢāļāļāļĢāļąāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāđāļāļ·āđāļāļāļŦāļĨāļąāļāđāļāļāļāđāļēāļĒ āđāļāđāđāļāđ āļāļēāļĢāļŠāđāļāļāļĩāđāļĄāļĨ āļāļēāļĢāļĨāđāļēāļ cache āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāđāļāļē āđāļāļĒāđāļĄāđāļāđāļāļāđāļāđāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ broker āđāļĒāļāļāđāļēāļāļŦāļēāļ Task runner āļāļđāļāļŠāļĢāđāļēāļāđāļ§āđāļ āļēāļĒāđāļ Django āđāļāļ
Celery āļĒāļąāļāļāļāļāļģāđāļāđāļāļŠāļģāļŦāļĢāļąāļ:
- āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāļāļāļĢāļ°āļāļēāļĒ āļāļāļŦāļĨāļēāļĒāđāļāļĢāļ·āđāļāļ
- āļāļīāļ§āļĨāļģāļāļąāļāļāļ§āļēāļĄāļŠāļģāļāļąāļ āđāļĨāļ° task routing
- Rate limiting āđāļĨāļ°āļāđāļĒāļāļēāļĒ retry āļāļąāđāļāļŠāļđāļ
- āļāļēāļĢāļāļąāđāļāđāļ§āļĨāļēāļāļēāļĄāļāļģāļŦāļāļ (Celery Beat)
- āļāļēāļĢāļāļīāļāļāļēāļĄāļāļĨāļĨāļąāļāļāđ āļāđāļ§āļĒ backend āļāļĩāđāļāļģāļŦāļāļāļāđāļēāđāļāđ
- Canvas workflows (chains, groups, chords) āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļĢāļ°āļŠāļēāļāļāļēāļāļāļĩāđāļāļąāļāļāđāļāļ
āļŠāļģāļŦāļĢāļąāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļāđāļāļāļāļēāļĢāđāļāļĩāļĒāļāļāļēāļāđāļāļ·āđāļāļāļŦāļĨāļąāļāđāļāļ fire-and-forget āđāļāļĨāļđāļāļąāļāđāļāļāļąāļ§āļāļāļ Django 6.0 āļĨāļāļāļ§āļēāļĄāļāļąāļāļāđāļāļāđāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļ āļŠāļģāļŦāļĢāļąāļāļŠāļīāđāļāđāļāļāđāļāļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļāļāļąāļ worker āđāļāļāļāļĢāļ°āļāļēāļĒ āļāļēāļĢāļāļąāđāļāđāļ§āļĨāļē āļŦāļĢāļ·āļāļāļēāļĢāļāļĢāļ°āļāļāļāļāļēāļ Celery 5.6 āļāļ·āļāļāļąāļ§āđāļĨāļ·āļāļāļāļĩāđāļāļīāļŠāļđāļāļāđāđāļĨāđāļ§
āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ: Django āđāļĨāļ° Celery
āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāđāļāļāļāļīāļāļŠāļģāļŦāļĢāļąāļāļāļģāđāļŦāļāđāļ backend āļĄāļąāļāļāļāļŠāļāļāļāļ§āļēāļĄāļĢāļđāđāđāļāļĩāđāļĒāļ§āļāļąāļ Celery āļāđāļēāļāļĨāđāļēāļāļāļĩāđāļāļ·āļāļāļģāļāļēāļĄāļāļĩāđāļāļģāļĄāļēāļāļēāļāļŠāļāļēāļāļāļēāļĢāļāđāļŠāļąāļĄāļ āļēāļĐāļāđ Django āļāļĢāļīāļāļāļĩāđāļāļĢāļīāļĐāļąāļāļāļąāđāļāđāļāđ startup āļāļāļāļķāļ FAANG
āļ: āļāļģāđāļĄāļāļēāļāļāļ§āļĢāļĢāļąāļ primary key āđāļāļāļāļĩāđāļāļ°āđāļāđāļ instance āļāļāļ model?
Instance āļāļāļ model Django āļĄāļĩāļāļēāļĢāđāļāļ·āđāļāļĄāļāđāļāļāļēāļāļāđāļāļĄāļđāļĨ queryset āđāļĨāļ° relation āļāļĩāđāđāļŦāļĨāļāđāļāļ lazy āļāļĩāđāđāļĄāđāļŠāļēāļĄāļēāļĢāļāļāļĒāļđāđāļĢāļāļāļāļēāļāļāļēāļĢ serialization āļāļēāļĢāļŠāđāļ order_id āđāļāļāļāļĩāđāļāļ°āđāļāđāļāļāļāļāđāļāļāļāđ Order āļāļģāđāļŦāđāļĄāļąāđāļāđāļāļ§āđāļēāļāļēāļāļāļķāļāļāđāļāļĄāļđāļĨāđāļŦāļĄāđāļāļēāļāļāļēāļāļāđāļāļĄāļđāļĨ āļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļ state āļāļĩāđāļĨāđāļēāļŠāļĄāļąāļĒāđāļĨāļ°āļāđāļāļāļīāļāļāļĨāļēāļāđāļāļāļēāļĢ serialization
āļ: self.retry() āđāļāļāļāđāļēāļāļāļēāļāļāļēāļĢāļŠāđāļāļāļēāļāđāļŦāļĄāđāļāđāļ§āļĒāļāļāđāļāļāļāļĒāđāļēāļāđāļĢ?
self.retry() āļĢāļąāļāļĐāļēāļāļģāļāļ§āļ retry āđāļāđāļāļĩāļāļāļģāļāļąāļ max_retries āļāļĩāđāļāļģāļŦāļāļ āđāļĨāļ°āđāļāđ exponential backoff āđāļāļĒāļāđāļēāđāļĢāļīāđāļĄāļāđāļ āļāļēāļĢāđāļĢāļĩāļĒāļ .delay() āļāđāļ§āļĒāļāļāđāļāļāļāļĩāļāļāļĢāļąāđāļāļŠāļĢāđāļēāļāļāļēāļāđāļŦāļĄāđāļāļąāđāļāļŦāļĄāļāļāļĢāđāļāļĄāļāļąāļ§āļāļąāļ retry āļāļĩāđāļāļđāļāļĢāļĩāđāļāđāļ āļāļķāđāļāļāļēāļāļāļģāđāļāļŠāļđāđāļĨāļđāļ retry āđāļĄāđāļŠāļīāđāļāļŠāļļāļāđāļĄāļ·āđāļāđāļāļīāļāļāļ§āļēāļĄāļĨāđāļĄāđāļŦāļĨāļ§āđāļāļāļāļēāļ§āļĢ
āļ: āđāļāļīāļāļāļ°āđāļĢāļāļķāđāļāđāļĄāļ·āđāļ Celery worker āļĨāđāļĄāļāļĨāļēāļāļāļēāļ?
āļāļĪāļāļīāļāļĢāļĢāļĄāļāļķāđāļāļāļĒāļđāđāļāļąāļāļāļēāļĢāļāļąāđāļāļāđāļē acks_late āļŦāļēāļ acks_late=True broker āļāļ°āļŠāđāļāļāđāļāļāļ§āļēāļĄāļāļĩāļāļāļĢāļąāđāļāđāļāļĒāļąāļ worker āļāļ·āđāļāđāļāļ·āđāļāļāļāļēāļ acknowledgment āđāļĄāđāđāļāļĒāļāļđāļāļŠāđāļ āļŦāļēāļāđāļāđāļāđāļēāđāļĢāļīāđāļĄāļāđāļ acks_late=False āļāđāļāļāļ§āļēāļĄāļāļ°āļāļđāļ acknowledge āļāđāļāļāļāļģāđāļāļīāļāļāļēāļĢ āļāļąāļāļāļąāđāļ crash āļŦāļĄāļēāļĒāļāļ§āļēāļĄāļ§āđāļēāļāļēāļāļŦāļēāļĒāđāļ āļĢāļ°āļāļ production āļāļĩāđāļāļąāļāļāļēāļĢāļ āļēāļĢāļ°āļāļēāļāļŠāļģāļāļąāļāļāļ§āļĢāđāļāđ acks_late=True āļĢāđāļ§āļĄāļāļąāļāļāļēāļĢāļāļāļāđāļāļāļāļēāļāđāļāļ idempotent
āļ: āļāļāļīāļāļēāļĒāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļĢāļ°āļŦāļ§āđāļēāļ .delay(), .apply_async() āđāļĨāļ°āļāļēāļĢāđāļĢāļĩāļĒāļāļāļēāļāđāļāļĒāļāļĢāļ
.delay(*args) āļāļ·āļ syntactic sugar āļŠāļģāļŦāļĢāļąāļ .apply_async(args=args) .apply_async() āļĢāļąāļāļāļąāļ§āđāļĨāļ·āļāļāđāļāļīāđāļĄāđāļāļīāļĄāđāļāđāļ countdown, eta, queue, priority āđāļĨāļ° expires āļāļēāļĢāđāļĢāļĩāļĒāļāļāļąāļāļāđāļāļąāļāļāļēāļāđāļāļĒāļāļĢāļ (āđāļāļĒāđāļĄāđāđāļāđ .delay()) āļāļ°āļāļģāđāļāļīāļāļāļēāļĢāđāļāļ synchronous āđāļ process āļāļąāļāļāļļāļāļąāļ āļāļķāđāļāļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļāļŠāļāļāđāļāđāđāļŠāļĩāļĒāļāļļāļāļāļĢāļ°āļŠāļāļāđāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨ async
āļ: caching layer āļĄāļĩāļāļāļīāļŠāļąāļĄāļāļąāļāļāđāļāļąāļāļāļĨāļĨāļąāļāļāđāļāļāļāļāļēāļ Celery āļāļĒāđāļēāļāđāļĢ?
āļāļĨāļĨāļąāļāļāđāļāļāļāļāļēāļāļāļĩāđāđāļāđāļāđāļ Celery result backend āļŠāļēāļĄāļēāļĢāļ cache āđāļāđāđāļāļĒāđāļāđ framework cache āļāļāļ Django View āļāļĢāļ§āļāļŠāļāļ cache āļāđāļāļ āļŦāļēāļāđāļĄāđāļĄāļĩ āļāļ°āļŠāđāļāļāļēāļāđāļĨāļ°āđāļāđāļ ID āļāļāļ AsyncResult request āļāļąāļāđāļāļāļ° poll result backend āļāđāļēāļ ID āļāļĩāđ cache āđāļ§āđāļāļāļāļ§āđāļēāļāļēāļāļāļ°āđāļŠāļĢāđāļ āđāļĨāđāļ§āļāļķāļ cache āļāļĨāļĨāļąāļāļāđāļŠāļļāļāļāđāļēāļĒ
āļĢāļēāļĒāļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļāļēāļĢ Deploy āļŠāļģāļŦāļĢāļąāļ Production
āļāļēāļĢ deploy Celery āļĢāđāļ§āļĄāļāļąāļ Django āļāđāļāļāđāļŦāđāļāļ§āļēāļĄāļŠāļģāļāļąāļāļāļąāļāļāđāļāļāļąāļāļ§āļĨāļāđāļēāļāļāļēāļĢāļāļāļīāļāļąāļāļīāļāļēāļāļŦāļĨāļēāļĒāļāļĢāļ°āļāļēāļĢāļāļĩāđāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāđāļĄāļąāļāļāļēāļĄāđāļāđāļāļāļąāļ
# myproject/settings.py â Production configuration
CELERY_TASK_ALWAYS_EAGER = False # Never True in production
CELERY_TASK_ACKS_LATE = True # Redelivery on worker crash
CELERY_WORKER_PREFETCH_MULTIPLIER = 1 # Fair scheduling
CELERY_TASK_REJECT_ON_WORKER_LOST = True # Reject on unexpected exit
CELERY_TASK_TIME_LIMIT = 300 # Hard kill after 5 minutes
CELERY_TASK_SOFT_TIME_LIMIT = 240 # SoftTimeLimitExceeded after 4 min
CELERY_WORKER_MAX_TASKS_PER_CHILD = 1000 # Prevent memory leaks
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = TrueāļāļēāļĢāļāļąāđāļāļāđāļē WORKER_MAX_TASKS_PER_CHILD āļāļ°āļĢāļĩāļŠāļāļēāļĢāđāļ worker process āļŦāļĨāļąāļāļāļēāļ 1000 āļāļēāļ āļāđāļāļāļāļąāļ memory leak āļāļķāđāļāđāļāđāļāļāļąāļāļŦāļēāļāļĩāđ Celery 5.6 āđāļāđāđāļāļāļĒāđāļēāļāļāļ§āđāļēāļāļāļ§āļēāļāļāđāļ§āļĒ patch memory leak
āļāļēāļĢāļāļąāļāļāļēāļĢ process āļāđāļ§āļĒ systemd āļŦāļĢāļ·āļ supervisor āļāļģāđāļŦāđāļĄāļąāđāļāđāļāļ§āđāļē worker āļāļ°āļĢāļĩāļŠāļāļēāļĢāđāļāđāļĄāļ·āđāļāđāļāļīāļāļāļ§āļēāļĄāļĨāđāļĄāđāļŦāļĨāļ§ unit systemd āđāļāļāļāđāļēāļĒ:
# /etc/systemd/system/celery-worker.service
[Unit]
Description=Celery Worker
After=network.target redis.service
[Service]
Type=forking
User=django
Group=django
WorkingDirectory=/opt/myproject
ExecStart=/opt/myproject/venv/bin/celery -A myproject worker \
--loglevel=info --concurrency=4 --pidfile=/var/run/celery/worker.pid
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
[Install]
WantedBy=multi-user.targetāđāļĢāļīāđāļĄāļāļķāļāļāđāļāļĄāđāļĨāļĒ!
āļāļāļŠāļāļāļāļ§āļēāļĄāļĢāļđāđāļāļāļāļāļļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāļŠāļąāļĄāļ āļēāļĐāļāđāđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āļŠāļĢāļļāļ
- Celery 5.6.3 (āļĄāļĩāļāļēāļāļĄ 2026) āļāļģ memory leak fix, structured logging, āļāļēāļĢāļĢāļāļāļĢāļąāļ quorum queue āđāļĨāļ°āļāļ§āļēāļĄāđāļāđāļēāļāļąāļāđāļāđāļāļąāļ psycopg3 āļĄāļēāđāļŦāđ āļāļ§āļĢāļāļąāļāđāļāļĢāļāļāļēāļāđāļ§āļāļĢāđāļāļąāļāđāļāđāļēāđāļāļ·āđāļāļĢāļąāļāļāļĢāļ°āđāļĒāļāļāđāļāļąāļāļāļĩ
- āļŠāđāļ primary key āđāļŦāđāļāļēāļāđāļŠāļĄāļ āđāļĄāđāđāļāđāļāļāļāđāļāļāļāđ ORM āļŠāļīāđāļāļāļĩāđāļāđāļāļāļāļąāļāļāđāļāļāļīāļāļāļĨāļēāļāđāļāļāļēāļĢ serialization āđāļĨāļ°āļāđāļāļĄāļđāļĨāļāļĩāđāļĨāđāļēāļŠāļĄāļąāļĒ
- āļāļģāļŦāļāļāđāļŠāđāļāļāļēāļāļāļēāļāđāļāļĒāļąāļāļāļīāļ§āđāļāļāļēāļ°āļāļēāļĄāļĨāļąāļāļĐāļāļ°āļāļāļāļ āļēāļĢāļ°āļāļēāļ āļāļēāļĢāđāļāđāļāđāļāļ·āļāļāļāļĩāđāđāļĢāđāļ§āđāļĨāļ°āļĢāļēāļĒāļāļēāļāļāļĩāđāļāđāļēāđāļĄāđāļāļ§āļĢāđāļāđāļāļāļąāļāļāļąāļāđāļāļ·āđāļ worker āđāļāļĩāļĒāļ§āļāļąāļ
- āđāļāđ
acks_late=TrueāđāļĨāļ°āļāļēāļĢāļāļāļāđāļāļāļāļēāļāđāļāļ idempotent āļŠāļģāļŦāļĢāļąāļāļ āļēāļĢāļ°āļāļēāļāļŠāļģāļāļąāļāļāļĩāđāļāđāļāļāļāļĒāļđāđāļĢāļāļāļāļēāļāļāļēāļĢāļĨāđāļĄāļāļāļ worker - āļāļąāđāļāļāđāļēāļāļąāđāļ
time_limitāđāļĨāļ°soft_time_limitāđāļāļāļļāļāļāļēāļāđāļāļ·āđāļāļāđāļāļāļāļąāļ worker āļāļĩāđāļāđāļēāļāļāļēāļāļāļēāļĢāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢāļāļĒāđāļēāļāđāļĄāđāļāļģāļāļąāļ - Framework āļāļēāļāđāļāļāļąāļ§āļāļāļ Django 6.0 āļĢāļāļāļĢāļąāļāļāļēāļāđāļāļ·āđāļāļāļŦāļĨāļąāļāđāļāļāļāđāļēāļĒ Celery āļĒāļąāļāļāļāļāļģāđāļāđāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāļāļāļĢāļ°āļāļēāļĒ āļāļēāļĢāļāļąāđāļāđāļ§āļĨāļē āđāļĨāļ° canvas workflows
- āļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļĨāļķāļāļāļāļāļāļīāļ§āđāļĨāļ°āļāļąāļāļĢāļē retry āļāđāļ§āļĒ Flower āļŦāļĢāļ·āļāļāļēāļĢāļĢāļ§āļāļĢāļ§āļĄ log āđāļāļāļĄāļĩāđāļāļĢāļāļŠāļĢāđāļēāļāđāļāļ·āđāļāļāļĢāļ§āļāļāļąāļāļāļąāļāļŦāļēāļāđāļēāļāļāļ§āļēāļĄāļāļļāļāđāļāļāļāļĩāđāļāļ°āļŠāđāļāļāļĨāļāļĢāļ°āļāļāļāđāļāļāļđāđāđāļāđ
āđāļāđāļ
āđāļāļĢāđ
āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ

Django 5.2 Custom Middleware āđāļĨāļ° Signal Handling: āļāļđāđāļĄāļ·āļāđāļāļĢāļĩāļĒāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāđāļāļīāļāđāļāļāļāļīāļ
āļāļđāđāļĄāļ·āļāđāļāļīāļāļĨāļķāļ Django 5.2 custom middleware āđāļĨāļ° signal handling āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāđāļāļīāļāđāļāļāļāļīāļ āļāļĢāļāļāļāļĨāļļāļĄ request pipeline, async middleware, post_save, pre_save, custom signals āđāļĨāļ°āđāļāļ§āļāļēāļāļāļāļīāļāļąāļāļīāļāļĩāđāļāļĩāļŠāļģāļŦāļĢāļąāļ production

āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ Django āđāļĨāļ° Python: 25 āļāļģāļāļēāļĄāļĒāļāļāļāļīāļĒāļĄāļāļĢāļ°āļāļģāļāļĩ 2026
25 āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ Django āđāļĨāļ° Python āļāļĩāđāļāļāļāđāļāļĒāļāļĩāđāļŠāļļāļ ORM, views, middleware, DRF, signals āđāļĨāļ°āļāļēāļĢāļāļĢāļąāļāđāļāđāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āļāļĢāđāļāļĄāļāļģāļāļāļāļĨāļ°āđāļāļĩāļĒāļāđāļĨāļ°āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ

āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ Django: ORM, Middleware āđāļĨāļ° DRF āđāļāļēāļ°āļĨāļķāļ
āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ Django āļāļĢāļāļāļāļĨāļļāļĄāļāļēāļĢāļāļĢāļąāļāđāļāđāļ ORM āļāđāļ§āļĒ select_related āđāļĨāļ° prefetch_related, āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄ middleware, āļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ serializer āļāļāļ Django REST Framework, permissions āđāļĨāļ°āļĢāļđāļāđāļāļ pagination