gpt4 book ai didi

python - celery 任务装饰器抛出 "TypeError: ' 模块对象不可调用”

转载 作者:行者123 更新时间:2023-11-28 18:47:15 30 4
gpt4 key购买 nike

我拼命想让 Celery 与 Django 一起玩得很好,但无济于事。我被以下问题绊倒了:

项目/设置.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

...

app/tasks.py:

from celery.task import task

@task()
def scheduled_task(param1, param2):
...
return something

直接调用 scheduled_task(param1, param2)(没有装饰器)按预期工作。但是,当添加装饰器并像这样启动“开发” celery worker 时:

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>

这对我来说确实是可以调用的!知道会发生什么吗?如果我遗漏了什么,我很乐意发布额外的日志、文件或澄清任何其他内容。

最佳答案

以防有人在使用 Celery beat 时收到相同的错误消息。在我的应用程序中,我使用了

command=/opt/python/run/venv/bin/celery beat -A appname --loglevel=INFO --workdir=/tmp -S django --pidfile /tmp/celerybeat.pid

并收到此错误消息。由于我使用 supervisord 复制了大部分用于守护 Celery beat 的代码(为此你需要一个特殊的配置),我没有意识到“-S django”假定使用了我之前没有安装过的 django_celery_beat 包。我安装它是因为它无论如何都具有生产使用的优势并且错误消失了。

关于python - celery 任务装饰器抛出 "TypeError: ' 模块对象不可调用”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18122458/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com