A specialized Redis backend for Celery that disables the default pub/sub mechanism for task result retrieval.
This enables polling based approach by simply calling ready() method on Celery's AsyncResult.
The default Celery Redis backend uses Redis pub/sub for real-time task result notifications. While pub/sub provides immediate updates, it can face challenges in certain scenarios:
- Deadlocks in highly concurrent/multi-threaded workloads due to single-threaded nature of Redis and Celery clients.
- Higher overhead with
SUBSCRIBEchannels.
This backend replaces SUBSCRIBE based backend with simple setter. This means that you need to check ready() == True when getting result.
- Compatible with Existing Code: Drop-in replacement for the standard Redis backend
- Resource Efficient: Reduces Redis memory usage by eliminating pub/sub channels
pip install celery-redis-pollAfter installation new backends are automatically registered with Celery:
redis+pollrediss+pollredis+cluster_pollrediss+cluster_poll
Configure your Celery application to use the polling backend:
from celery import Celery
app = Celery('your_app',
broker='redis://localhost:6379/0',
backend='redis+poll://localhost:6379/0')For clustered Redis, use redis+cluster_poll.
- Python >= 3.7
- Celery >= 5.0.0
- Redis >= 4.5.0
- celery-redis-cluster >= 0.1.6
For development, install extra dependencies:
pip install celery-redis-poll[dev]This project is licensed under the MIT License.
Contributions are welcome! Please feel free to submit issues and pull requests.