Bốn lựa chọn phổ biến, khác nhau ở độ phức tạp và feature set.
Celery là chuẩn de-facto, broker Redis/RabbitMQ. Có đủ retry, scheduler (beat), workflow (chord/group), monitoring (Flower). Cài đặt nặng, học hơi dốc — hợp khi task nhiều và chuỗi task phức tạp. RQ (Redis Queue) code Python đơn giản, chỉ broker Redis, không có scheduler built-in (phải thêm rq-scheduler) — hợp khi chỉ cần fire-and-forget mà team đã có Redis sẵn. django-q / django-q2 tích hợp sâu với Django, dùng DB hoặc Redis làm broker, admin UI có sẵn — nhẹ, hợp project nhỏ không muốn dựng thêm Redis. Huey gọn nhẹ, có scheduler, broker Redis — hợp dự án nhỏ-vừa muốn ít boilerplate hơn Celery.
Need | Pick
---------------------------------|----------
Workflow phức tạp, scale lớn | Celery
Gọn, chỉ background job | RQ hoặc Huey
Không muốn thêm Redis | django-q (DB broker)
Cron schedule mạnh | Celery beatĐừng chọn Celery "cho chắc" nếu project chỉ có 3 task email + 1 cron.
- Overhead vận hành (worker, beat, monitoring) sẽ tốn thời gian hơn cả viết feature.
- Bắt đầu với django-q hoặc RQ, đổi sang Celery khi thực sự chạm trần.
Four popular options that differ in complexity and feature set:
- Celery — the de-facto standard, broker Redis/RabbitMQ. Full retry, scheduler (beat), workflows (chord/group), monitoring (Flower). Heavy setup, steeper learning curve. Best when tasks are many and chains are complex.
- RQ (Redis Queue) — simple Python code, Redis-only broker. No built-in scheduler (add
rq-scheduler). Fits fire-and-forget jobs when Redis is already in the stack. - django-q / django-q2 — tightly integrated with Django: DB or Redis broker, built-in admin UI. Light, fits smaller projects that do not want a dedicated Redis.
- Huey — compact, has a scheduler, Redis broker. Fits small-to-mid projects wanting less boilerplate than Celery.
Need | Pick
---------------------------------|----------
Complex workflow, large scale | Celery
Slim, just background jobs | RQ or Huey
Do not want extra Redis | django-q (DB broker)
Strong cron schedule | Celery beatPitfall: Do not default to Celery "just in case" if the project has 3 email tasks + 1 cron.
- Operational overhead (workers, beat, monitoring) will eat more time than writing features.
- Start with django-q or RQ; switch to Celery when you actually hit the ceiling.