Atif Shafi
Atif Shafi

Reputation: 1194

Celery unable to use redis

Trying to start Celery first time but issues error as below, i have installed redis and its starting fine , but still somehow django seems to have issues with it ,

File "<frozen importlib._bootstrap_external>", line 848, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/atif/Documents/celery_test/celery-env/lib/python3.8/site-packages/kombu/transport/redis.py", line 263, in <module>
    class PrefixedStrictRedis(GlobalKeyPrefixMixin, redis.Redis):
AttributeError: 'NoneType' object has no attribute 'Redis'

Celery.py

from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_test.settings')



    app = Celery('celery_test',)
    
    app.config_from_object('django.conf:settings')
    
    # Load task modules from all registered Django apps.
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
    
    @app.task(bind=True)
    def debug_task(self):
        print(f'Request: {self.request!r}')

Settings

#celery stuff ---------------
BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Kolkata'

celery_module/tasks.py

from celery import Celery

app = Celery('tasks',)

@app.task
def add(x, y):
    return x + y

Upvotes: 70

Views: 36056

Answers (3)

Vadim
Vadim

Reputation: 311

If you use Docker Compose, me helped to add redis to file requirements.txt

Upvotes: 1

riyaolega
riyaolega

Reputation: 131

Install redis globally with

pip install redis

OR (if you use pipenv)

The error in my case occurs as the redis package in the environment is not used when running

python -m celery -A *django_app* worker

If you use pipenv to manage you python environment you could run the command above as:

pipenv run python -m celery -A *django_app* worker

Upvotes: 9

theseeker
theseeker

Reputation: 1580

Try to install Redis as in your virtual environment as well:

pip install Redis

Upvotes: 143

Related Questions