Celery

A shop ledger page, 1899. Every line adds up.
How to Design Reliable Background Jobs for a Web Application
Move slow work out of request handlers with a queue, idempotent tasks, bounded retries, status tracking, and observability.
2 min read
How to Fix Memory Growth in a Python Worker
Find memory growth in long-lived Python workers by measuring process behavior, bounding task data, and investigating native and Python allocations.
2 min read
How to Make Celery Background Jobs Reliable in Django
Design more reliable Celery tasks with idempotency, bounded retries, timeouts, queue separation, monitoring, and explicit handling for failed jobs.
4 min read
Celery Scales Workers but Exhausts the Database Connection Pool
More Celery workers means more PostgreSQL connections. Do the concurrency math, set CONN_MAX_AGE sensibly, and use pgbouncer to avoid too many clients errors.
5 min read
Celery Serialization Pitfalls and How task_always_eager Hides Bugs in CI
Tests pass with eager Celery but tasks fail in production on serialization. Learn why, pass IDs instead of objects, and test closer to real behavior.
4 min read
Celery Worker Killed by the OOM Killer: Diagnose and Fix Memory-Heavy Tasks
Workers disappearing with SIGKILL usually mean memory pressure. Confirm the OOM kill, then fix it with chunking, child recycling and sensible prefetch.
4 min read
Deploying New Code While Old Celery Tasks Are Still Queued
After a deploy, queued Celery messages built for the old signature hit new code and fail. Learn how to change task arguments and names safely.
4 min read
Deploy Celery Worker, Beat and Flower With Docker Compose Using One Image
Run the Django web app, Celery worker, beat and Flower from a single Docker image with different commands, avoiding four Dockerfiles that drift apart.
4 min read
Celery vs Cron vs a Django Management Command: Pick the Simplest Tool
Not every scheduled or slow job needs Celery. Use clear decision criteria to choose between cron, a Django management command, and a task queue.
5 min read