mrkeyoor.com_
Sat 12 Sept 13:52 UTC
Automationevaluationupdated 12 Sept 2026

celery review

Celery is a Python task queue that sends work from an application through a message broker to worker processes. It moves slow, scheduled, or retryable jobs out of a web request and can route them across many workers while optionally recording their status and results.

trackingstars / 7d
Verdict

Our Celery run passed 3,912 tests and failed 8 privilege-check cases in 599 seconds, which shows a deep test suite and a real environment-sensitive edge. Use Celery when background work has grown into shared infrastructure and your team can own a broker, worker supervision, delivery semantics, and monitoring. Choose RQ or Huey for a small Redis or database-backed queue where Celery's many transports and settings would mostly sit unused.

We ran it

Lab card: what happened when we ran celeryScreenshot of celery (docs.celeryq.dev)
Install✓ · 54s121 packages · 272 MB
Build✓ · 5s
Tests✗ · 599s3912 passed · 8 failed · 39 skipped of 3920 (pytest)
Known vulns10(pip-audit)
Repo828 files~106,878 lines of source · 6.3 MB · 7 CI workflows

Answers from our run

Does celery build from source?

Dependencies installed in 54 seconds (121 packages), and the build succeeded in 5 seconds. We cloned commit 319d9c7 into a clean Debian container with 3 CPUs and no project-specific setup.

Do celery's tests pass?

Not all of them: 3912 of 3920 passed and 8 failed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does celery have known vulnerabilities in its dependencies?

pip-audit flagged 10 known advisories in the dependency tree at the time of our run.

Who should not use celery?

Windows-first production teams: the README says Microsoft Windows is unsupported and asks users not to open Windows issues.

What are the alternatives to celery?

RQ, Dramatiq, Huey. Our Celery run passed 3,912 tests and failed 8 privilege-check cases in 599 seconds, which shows a deep test suite and a real environment-sensitive edge.

Setup3/554-second install; production still needs a broker and workers
Docs5/5Detailed guides explain brokers, delivery, scheduling, and operations
Community5/528,876 stars with code and issue activity on September 12
Maturity5/5Active since 2009; 3,912 tests passed despite 8 sandbox failures

Who it’s for

Python teams that need background jobs across more than one process or machine.
Django, Flask, or FastAPI operators prepared to run RabbitMQ or Redis beside their application.
Systems that need retries, task routing, rate limits, scheduled work, or interchangeable result stores.
Organizations with enough operational discipline to monitor workers, brokers, queues, and duplicate-safe task code.

Who it’s NOT for

Windows-first production teams: the README says Microsoft Windows is unsupported and asks users not to open Windows issues.
Workloads that require exactly-once side effects: the task guide says late acknowledgment can execute a task multiple times after a worker crash, so those tasks must be idempotent.
Small applications that only need a Redis-backed FIFO queue: Celery's broker, worker, optional result backend, and scheduling choices can be more machinery than RQ or Huey.
PostgreSQL-only stacks expecting to use their database as the broker: issue #5149 remains an open feature request rather than a documented production transport.
SQS users who cannot tolerate a message staying invisible through its visibility timeout during shutdown: open issue #10172 reproduces that behavior on Celery 5.6.2.
Teams that cannot review dependency advisories before deployment: our commit 319d9c7 environment produced 10 known vulnerabilities in pip-audit.

Setup reality

Our fresh Debian sandbox installed commit 319d9c7 in 54 seconds, adding 121 packages and using 272 MB. The build passed in 5 seconds. Tests exited 1 after 599 seconds: 3,912 passed, 8 failed, and 39 skipped out of 3,920. All 8 failures ended in a SecurityError about superuser privileges, while the log tail printed uid and euid 1000. Pip-audit reported 10 known vulnerabilities.

Celery 5.6 supports Python 3.9 through 3.13 and needs a separate message broker. RabbitMQ and Redis are the documented feature-complete choices; other transports include SQS and Google Pub/Sub. Tracking states or return values adds a result backend, and production workers need process supervision. Broker and backend URLs carry any service credentials.

Windows is explicitly unsupported. Tasks using late acknowledgment must tolerate duplicate execution after a worker crash, and periodic schedules need only one Celery beat scheduler or duplicate jobs can be sent. Broker behavior differs too: Celery's first-steps guide warns that Redis is more susceptible to data loss after abrupt termination or power failure.

Celery 5.6 sends Python functions through a broker

Celery 5.6 turns a decorated Python function into a message that a separate worker can execute. An application puts the message on RabbitMQ, Redis, SQS, or another transport, and a worker pulls it from the queue. The caller can continue immediately. If the application needs status or a return value, Celery sends that data to a configured result backend. This split is why Celery fits web requests, batch jobs, and work spread across machines.

The breadth is visible before a worker starts. commit 319d9c7 had 828 files and about 106,878 source lines in a 6.3 MB checkout. Our install pulled 121 packages and occupied 272 MB. Celery also separates several supporting projects, including Kombu for messaging and Billiard for process pools. Adopting it means learning a small ecosystem and its operating model, not merely adding a decorator to slow functions.

RabbitMQ and Redis are the two feature-complete brokers

Celery 5.6 documents RabbitMQ and Redis as its feature-complete transports. The first-steps guide calls RabbitMQ suitable for production and warns that Redis is more susceptible to data loss after abrupt termination or power failure. Amazon SQS and Google Pub/Sub are supported, while several other transports are described as experimental. Broker choice changes acknowledgement, failover, and visibility behavior, so an existing service is not automatically the right Celery broker.

Python 3.9 through 3.13 is supported by the 5.6 series, with 5.6 documented as the last line for Python 3.9. A worker also needs a broker URL and a process manager in production. Results add another decision: Redis, RPC, SQLAlchemy, Django ORM, and other stores have different persistence and retrieval rules. You can skip the result backend when nobody needs task state or return values, which removes one service from the path.

What happened when we ran it

Our measurement setup was a fresh unprivileged Debian container with 3 CPUs and 8 GB of RAM. Installing commit 319d9c7 succeeded in 54 seconds, adding 121 packages and using 272 MB on disk. The build completed successfully in 5 seconds. This is a reasonable repository setup for a mature Python system, though it does not include provisioning RabbitMQ, Redis, SQS, or a result store for an application.

Pytest ran for 599 seconds and exited 1: 3,912 tests passed, 8 failed, and 39 were skipped out of 3,920. The tail also recorded 3 expected failures, 85 warnings, and 27,673 passing subtests. Every listed failure raised celery.exceptions.SecurityError with a message about running a worker with superuser privileges. The log printed uid and euid 1000, and it does not explain why those checks reached that conclusion. Pip-audit reported 10 known vulnerabilities.

Late acknowledgment can execute a Celery 5.6 task again

The Celery 5.6 task guide asks authors to make task functions idempotent, meaning a repeat call with the same arguments should not create an unintended second effect. By default, a worker acknowledges a message just before execution. Turning on acks_late moves that acknowledgment until after the task returns, but the documentation warns that the task may execute multiple times if the worker crashes during it. Payment, email, and inventory code needs its own duplicate protection.

Retries, time limits, prefetch settings, and result persistence all alter failure handling. Celery supplies the controls, while the application owns the policy. Periodic work adds Celery beat, and the guide says only 1 scheduler should run for a schedule or duplicate tasks will be emitted. Our 599-second test run exercises a large body of project code, yet it cannot prove that a buyer's task is safe to repeat or that a shutdown sequence preserves every side effect.

Windows is unsupported, and SQS has a shutdown report

Celery 5.6 says Microsoft Windows is unsupported, though it may work, and asks users not to file issues for that platform. Linux teams still need to test the selected pool, broker, and shutdown signals. Open issue #10172 describes Celery 5.6.2 with SQS receiving a message during warm shutdown, leaving it in flight and invisible until the queue's visibility timeout. That report is specific to the supplied SQS reproduction; it does not establish the same behavior for RabbitMQ or Redis.

Release v5.6.3 arrived on March 26, 2026 with worker, backend, scheduling, and documentation fixes. It includes a Redis failover reconnection fix and an update for PyMongo 4.16 compatibility. Main has continued moving since that release. Our commit 319d9c7 build passed in 5 seconds, while pip-audit still found 10 known vulnerabilities in the lab environment. Pin the Celery line and extras, then review the complete resolved dependency set instead of assuming the base package tells the whole story.

A same-day push shows activity across a large surface

GitHub recorded a push on September 12, 2026, and issues and pull requests were being updated that day. The repository had 28,876 stars and 733 open issues and pull requests when fetched. Current work included fixes for task-name collisions, database result metadata, and multi-server URL handling. That is strong evidence of maintenance. The combined open count is not a bug total, and its size also shows how many brokers, pools, backends, and workflow features need attention.

Celery earns its place when background jobs are infrastructure: several applications publish work, worker groups need separate queues, or broker and result choices must stay open. The 121-package install and 272 MB footprint are modest beside the operational decisions it exposes. For one application with a Redis queue and a few jobs, RQ or Huey is easier to hold in your head. Once routing, retries, scheduling, and worker fleets become shared concerns, Celery's maturity repays the added machinery.

Alternatives

ProjectWhat it isPick it when
RQA Python job queue built around Redis or Valkey with a smaller conceptual surface.pick this instead when one Redis-backed queue, workers, scheduling, and retries cover the requirement.
DramatiqA Python background-task library with RabbitMQ and Redis broker options.pick this instead when you want a narrower actor API and do not need Celery's range of transports and result backends.
HueyA small Python task queue that can use Redis, PostgreSQL, SQLite, files, or memory.pick this instead when low dependency count or a PostgreSQL and SQLite storage path matters more than Celery's distributed feature set.

What people are saying

  1. [velocity-scout] celery/celery

Sources

  1. Celery repository
  2. Celery README
  3. Celery v5.6.3 release
  4. Celery first-steps guide
  5. Celery task guide
  6. Celery periodic-task guide
  7. Issue 10172: SQS message received during warm shutdown
  8. Issue 5149: PostgreSQL as a broker request

More automation reviews

dagu · helm · awesome-n8n-templates · gogcli · ars0n-framework-v2 · douyin-downloader · the whole board →