【问题标题】:@shared_task decorator doesn't work@shared_task 装饰器不起作用
【发布时间】:2017-09-28 00:45:51
【问题描述】:

问题:当我从自定义文件导入数据时,@shared_task 装饰器不起作用。我的意思是,当我启动 celery 时,@shared_task 下的所有任务都不会出现在任务列表中。

例如,在这种情况下,@shared_task 装饰器不起作用:

from __future__ import absolute_import, unicode_literals

from celery import shared_task

from .models import foo


@shared_task
def my_foo_backup(id):
    my_foo = foo(....)
    ...
    ...

这是一个例子,当@shared_task 工作时:

from __future__ import absolute_import, unicode_literals

from celery import shared_task


@shared_task
def my_foo_backup(id):
    my_foo = foo(....)
    ...
    ...

为什么?!?

【问题讨论】:

  • 这段代码是你在“tasks.py”中写的吗?当然,Celery 只将“tasks.py”识别为一个任务。另见docs.celeryproject.org/en/latest/reference/…
  • 是的,当然。在我的第二个示例中,它不会将@shared_task 添加到任务列表中。
  • 第一个例子,可以导入models.foo吗?
  • 告诉k,试过了。这也行不通

标签: django celery celery-task cookiecutter-django


【解决方案1】:

解决该问题的方法是将import 命令移到函数内部。这样它就可以正常工作并符合 PEP8 的规则。

from __future__ import absolute_import, unicode_literals

from celery import shared_task


@shared_task
def my_foo_backup(id):
    from .models import foo

    my_foo = foo(....)
    ...
    ...

【讨论】:

  • 这也解决了我的问题,但我不明白为什么它会有所作为。你能详细说明一下吗?
  • 可能有一些导入循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2020-11-09
  • 2015-09-03
  • 2012-06-29
  • 2021-10-28
相关资源
最近更新 更多