Python django芹菜收到类型为'的未注册任务;打印测试&x27;
与问题相一致: 我用芹菜做了django,比如: drf_项目/drf_项目/芹菜.pyPython django芹菜收到类型为'的未注册任务;打印测试&x27;,python,django,celery,celerybeat,Python,Django,Celery,Celerybeat,与问题相一致: 我用芹菜做了django,比如: drf_项目/drf_项目/芹菜.py from __future__ import absolute_import, unicode_literals from celery import Celery import os os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'drf_project.settings') app = Celery('drf_project') app.config_
from __future__ import absolute_import, unicode_literals
from celery import Celery
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'drf_project.settings')
app = Celery('drf_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
在drf_项目/drf_项目/init.py中
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
drf_项目/用户管理/tasks.py
from drf_project.celery import app
from time import strftime
@app.task
def print_test():
print strftime('%Y-%m-%d %H:%M:%S')
with open('abc.txt', 'ab+') as test_file:
test_file.writeline(strftime('%Y-%m-%d %H:%M:%S'))
在drf_项目/drf_项目/settings.py中
INSTALLED_APPS += ('django_celery_beat',)
CELERYBEAT_SCHEDULE = {
"test_1": {
"task": "tasks.print_test",
"schedule": timedelta(seconds=2),
},
}
我用命令在不同的终端上运行芹菜工人和beat:
celery -A drf_project worker -l info -E
及
beat每2秒向工人发送一次任务,如:
[2016-11-28 12:25:19314:INFO/MainProcess]调度程序:发送到期任务导入联系人(打印测试)
但是worker抛出的错误如下所示:
[2016-11-28 12:24:57551:ERROR/MainProcess]收到类型为“print_test”的未注册任务。
该消息已被忽略和丢弃
您是否记得导入包含此任务的模块?
或者您使用的是相对导入
请看
了解更多信息
邮件正文的全部内容为:
u'[],{},{“chord”:null,“callbacks”:null,“errbacks”:null,“chain”:null}'(77b)
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python2.7/dist packages/芹菜/worker/consumer/consumer.py”,第549行,在收到的on_任务中
策略=策略[类型\]
KeyError:“打印测试”
我可以在我的worker应用程序中看到任务,如:
[tasks]
. user_management.tasks.print_test
如何解决此错误?尝试在CELERYBEAT\u计划中设置任务的绝对路径,“用户管理.任务.打印测试” 应该是这样的:
INSTALLED_APPS += ('django_celery_beat',)
CELERYBEAT_SCHEDULE = {
"test_1": {
"task": "user_management.tasks.print_test",
"schedule": timedelta(seconds=2),
},
}
我什么都试过了。从
“用户管理.任务.打印测试”
到“drf\U项目.用户管理.任务.打印测试”
。如果我使用这两个选项中的任何一个,我都看不到worker中列出的任务。只有在我选择任务时,它才会显示在worker中。在CELERYBEAT计划中,任务必须按其在芹菜任务列表中的显示进行调用。请尝试列出所有任务并搜索您的任务,从proj.芹菜导入应用>>>app.tasks{'celery.chord_unlock':,'celery.backend_cleanup','celery.chord':}我无法在app.tasksTry中使用'code'芹菜查看我的任务-A{celery_app_name}检查已注册的'code'这将返回所有已注册的任务。
INSTALLED_APPS += ('django_celery_beat',)
CELERYBEAT_SCHEDULE = {
"test_1": {
"task": "user_management.tasks.print_test",
"schedule": timedelta(seconds=2),
},
}