如何解决Django和Celery-ModuleNotFoundError:没有名为“ celery.task”的模块
我想使用Django
在Celery
中启动一个定期任务。这是我项目的相关部分:
# 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}')
__init__.py
看起来像这样:
# 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',)
我的tasks.py
应用文件夹中的books
文件看起来像这样:
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.
我还将redis
设置为代理,并安装了django-celery-beat
东西。但是当我通过以下命令运行worker时:
celery -A bookProjectSetting beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
然后我得到以下错误:
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'
从错误中我认为装饰器出了点问题,但我不知道为什么。希望有人能帮忙。
提前打个招呼:=)
注意:这是我的requirements.txt
文件的内容,供版本参考
$ 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
解决方法
“任务”不再在 5.x 版本中 您可以使用 4.x 版
- pip3 卸载芹菜
- pip3 安装 celery==4.4.2
修改空格
,我不赞成从此问题中了解该功能:https://github.com/celery/celery/issues/6406
现在看来您需要使用它来执行计划任务:
https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html?highlight=periodic
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。