Django and Celery - ModuleNotFoundError: No module named 'celery.task'
Solution 1
The "task" is no longer in version 5.x You can use version 4.x
- pip3 uninstall celery
- pip3 install celery==4.4.2
Edited the spaces
Solution 2
They deprecated that functionality as I understood from this issue: https://github.com/celery/celery/issues/6406
Now it seems to be that you need to use this to make scheduled tasks:
https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html?highlight=periodic
abdullah celik
Updated on June 19, 2022Comments
-
abdullah celik almost 2 years
I wanted to start a periodic task in
Django
usingCelery
. Here are the relevant parts of my project:# celery.py from celery import Celery # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bookProjectSetting.settings') app = Celery('bookProjectSetting') # Using a string here means the worker doesn't have to serialize # the configuration object to child processes. # - namespace='CELERY' means all celery-related configuration keys # should have a `CELERY_` prefix. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks() @app.task(bind=True) def debug_task(self): print(f'Request: {self.request!r}')
The
__init__.py
looks like this:# This will make sure the app is always imported when # Django starts so that shared_task will use this app. from .celery import app as celery_app __all__ = ('celery_app',)
My
tasks.py
file in mybooks
app folder looks like this:from books.models import Book from celery.schedules import crontab from celery.decorators import periodic_task @periodic_task( run_every=(crontab(minute='*/10')), name="update_life_time_of_books", ignore_result=True) def update_life_time_of_books(): # do sth.
I also set up
redis
as broker and installed thedjango-celery-beat
stuff. But when I run the worker via the command:celery -A bookProjectSetting beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
Then I get the following error:
File "/home/ac3l1k/Desktop/PROJECT/simpleDjangoProjects/bookProject/env/lib/python3.8/site-packages/celery/local.py", line 403, in _compat_periodic_task_decorator from celery.task import periodic_task ModuleNotFoundError: No module named 'celery.task'
From the error I assume that something is wrong with the decorator but I can not tell why. Hope someone can help.
Thnks in advance :=)
NOTE: Here is the content of my
requirements.txt
file for version references$ pip freeze
amqp==5.0.1 asgiref==3.2.10 billiard==3.6.3.0 celery==5.0.1 click==7.1.2 click-didyoumean==0.0.3 click-repl==0.1.6 Django==3.1.2 django-celery-beat==2.1.0 django-timezone-field==4.0 djangorestframework==3.12.1 kombu==5.0.2 prompt-toolkit==3.0.8 python-crontab==2.5.1 python-dateutil==2.8.1 pytz==2020.1 redis==3.5.3 six==1.15.0 sqlparse==0.4.1 vine==5.0.0 wcwidth==0.2.5