There seem to be different implementations of task/job queues for Python 3:
Then there are “cloud” based solutions like Google’s Task Queue API or AWS’s Cloud Watch Events, but that’s more of a last resort.
For my project I am looking for a stable and active task queue implementation. I’ve used Celery for the past year, but the lack of support and non-attention to existing bugs is worrisome.
What alternatives exist?
From my understanding, Celery is a distributed task queue, which means the only thing that it should do is dispatching tasks/jobs to others servers and get the result back. RabbitMQ is a message queue, and nothing more. However, a worker could just listen to the MQ and execute the task when a message is received.
Celery is an open source asynchronous task queue or job queue which is based on distributed message passing. While it supports scheduling, its focus is on operations in real time.
Redis Queue is a python library for queueing jobs for background processing. Since many hosting services will time out on long HTTP requests, it is best to design APIs to close requests as quickly as possible. Redis Queue allows us to do this by pushing tasks to a queue and then to a worker for processing.
I wrote Dramatiq specifically because of my increasing frustration with Celery having used it professionally for years. Check out the motivation page the "why" and a feature comparison between Dramatiq, Celery and RQ. Some highlights:
One new alternative is django-carrot, which came about due to our requirement for a lightweight alternative to Celery, while still providing support for RabbitMQ (I think the other alternatives you've mentioned are all based on Redis)
Django-carrot is still under development but is expected to go into production at my company in the next few weeks
Disclaimer - I'm the author of django-carrot
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With