Celery is an open source asynchronous task queue/job queue based on
distributed message passing. It is focused on real-time operation,
but supports scheduling as well.

The execution units, called tasks, are executed concurrently on one or
more worker nodes using multiprocessing, Eventlet or gevent. Tasks can
execute asynchronously (in the background) or synchronously
(wait until ready).

Celery is used in production systems to process millions of tasks a day.

Excellent configurable error recovery when using
RabbitMQ, ensures your tasks are never lost.

Distributed

Runs on one or more machines. Supports
broker clustering and HA when used in
combination with RabbitMQ. You can set up new
workers without central configuration (e.g. use
your grandma's laptop to help if the queue is
temporarily congested).

Concurrency

Concurrency is achieved by using multiprocessing,
Eventlet, gevent or a mix of these.

Scheduling

Supports recurring tasks like cron, or specifying
an exact date or countdown for when after the task
should be executed.

Latency

Low latency means you are able to execute tasks
while the user is waiting.

Return Values

Task return values can be saved to the selected
result store backend. You can wait for the result,
retrieve it later, or ignore it.