我正在拼命想让 Celery 和 Django 好好相处,但无济于事。我在以下方面被绊倒:
项目/settings.py:
...
import djcelery
djcelery.setup_loader()
BROKER_URL = 'django://'
CELERY_RESULT_BACKEND = 'django://'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
...
应用程序/tasks.py:
from celery.task import task
@task()
def scheduled_task(param1, param2):
...
return something
直接调用scheduled_task(param1, param2)
(没有装饰器)按预期工作。然而,当添加装饰器并像这样启动“开发”芹菜工人时:
python manage.py celery worker --loglevel=info
...我收到以下错误:
TypeError: 'module' object is not callable
我已经把它固定在@task
装饰器上。我尝试的每个组合都失败了,包括:
from celery import task
from celery.task import task
from celery.task.base import task
@task
@task()
@task.task
@task.task()
@celery.task
@celery.task()
异常中的调用堆栈似乎没有任何区别,他们似乎都认为这task
是一个模块,而不是可调用的!让事情变得更加令人沮丧:
>>> from celery.task import task
>>> task
<function task at 0x10aa2a758>
这对我来说肯定是可以调用的!知道会发生什么吗?如果我遗漏了什么,我很乐意发布额外的日志、文件或澄清其他任何事情。