Django āđāļĨāļ° Celery: āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ‡āļēāļ™āđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠāđāļĨāļ°āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ 2026

āļ„āļđāđˆāļĄāļ·āļ­ Django Celery āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒāļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āļˆāļĢāļīāļ‡, task routing, āļāļēāļĢāļ•āļąāđ‰āļ‡āđ€āļ§āļĨāļē Celery Beat, āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļē production āđāļĨāļ°āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„ 2026

Django āđāļĨāļ° Celery āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ‡āļēāļ™āđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠ

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:

python
# 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 āļ–āļđāļāļāļģāļŦāļ™āļ”āļ„āđˆāļē:

python
# 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 āļ•āđˆāļēāļ‡āđ†

python
# 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:

python
# 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

python
# 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 āļˆāļ°āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ•āļēāļĄāļ„āļīāļ§:

bash
# 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 āļ•āļēāļĄāļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļĩāđˆāļāļģāļŦāļ™āļ”

python
# 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:

bash
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

bash
# 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 āļ•āđ‰āļ­āļ‡āđƒāļŦāđ‰āļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļāļāļąāļšāļ‚āđ‰āļ­āļāļąāļ‡āļ§āļĨāļ”āđ‰āļēāļ™āļāļēāļĢāļ›āļāļīāļšāļąāļ•āļīāļ‡āļēāļ™āļŦāļĨāļēāļĒāļ›āļĢāļ°āļāļēāļĢāļ—āļĩāđˆāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļāđ‡āļĄāļąāļāļ–āļēāļĄāđ€āļŠāđˆāļ™āļāļąāļ™

python
# 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 āđāļšāļšāļ‡āđˆāļēāļĒ:

ini
# /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
#celery
#python
#async
#interview

āđāļŠāļĢāđŒ

āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡

Django 5.2 custom middleware āđāļĨāļ° signal handling āļ„āļđāđˆāļĄāļ·āļ­āđ€āļ•āļĢāļĩāļĒāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

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 - āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Django āđāļĨāļ° Python: 25 āļ„āļģāļ–āļēāļĄāļĒāļ­āļ”āļ™āļīāļĒāļĄāļ›āļĢāļ°āļˆāļģāļ›āļĩ 2026

25 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Django āđāļĨāļ° Python āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ” ORM, views, middleware, DRF, signals āđāļĨāļ°āļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļžāļĢāđ‰āļ­āļĄāļ„āļģāļ•āļ­āļšāļĨāļ°āđ€āļ­āļĩāļĒāļ”āđāļĨāļ°āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”

āđ€āļ•āļĢāļĩāļĒāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Django āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ ORM, Middleware āđāļĨāļ°āđāļ™āļ§āļ„āļīāļ” Django REST Framework

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Django: ORM, Middleware āđāļĨāļ° DRF āđ€āļˆāļēāļ°āļĨāļķāļ

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Django āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡ ORM āļ”āđ‰āļ§āļĒ select_related āđāļĨāļ° prefetch_related, āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ middleware, āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž serializer āļ‚āļ­āļ‡ Django REST Framework, permissions āđāļĨāļ°āļĢāļđāļ›āđāļšāļš pagination