【问题标题】:Django, ImportError: cannot import name 'task' from 'celery'Django,ImportError:无法从“芹菜”导入名称“任务”
【发布时间】:2022-01-10 09:00:26
【问题描述】:

我有使用 Celery 4.4.2 版的 Django 应用程序,它运行良好。

from celery import task
import logging


@task(ignore_result=True)
def log_user_activity(user_id):
    try:
        logging.info(user_id)
    except Exception as e:
        logging.error(str(e))

当我尝试将 Celery 版本更新到 v5.2.2 时,出现以下错误:

ImportError: cannot import name 'task' from 'celery'

有人可以帮助替换任务吗? 他们仍然有同样的例子。 https://github.com/celery/celery/blob/v5.2.2/examples/celery_http_gateway/tasks.py

【问题讨论】:

  • 请将完整的错误回溯添加到您的问题中!

标签: python django django-celery


【解决方案1】:

此 API 已被弃用,然后是 removed in 5.0

该页面建议更改

from celery import task

进入

from celery import shared_task

还有其他更改不适用于您发布的 sn-p,但可能适用于您的其余代码。有关详细信息,请参阅该页面(以及文档的其余部分,尤其是 Upgrading from Celery 4.x 部分)。

【讨论】:

  • 还有很多其他依赖包也需要更新。这会导致一些错误。所以令人困惑的是错误与芹菜或其他包有关。但解决了他们。谢谢
【解决方案2】:

一些旧的东西在 Celery 5.0 中已被弃用,最新版本的 celery 工作正常,大部分新东西都添加到新版本中。 推荐:您需要使用最新版本的芹菜。

芹菜.py

from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pj_name.settings')
app = Celery('pj_name')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

之后进入 app/tasks.py 并添加您的第一个调度程序函数。

from pj_name.celery import app
@app.task
def first_task():
    pass

如果您使用的是 celery 最新版本,则上述代码块有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-24
    • 2018-05-29
    • 1970-01-01
    • 2019-09-18
    • 2015-04-30
    • 2019-08-27
    • 2016-09-07
    • 2018-11-15
    相关资源
    最近更新 更多