@shared_task 装饰器不起作用
Posted
技术标签:
【中文标题】@shared_task 装饰器不起作用【英文标题】:@shared_task decorator doesn't work 【发布时间】:2017-09-28 00:45:51 【问题描述】:问题:当我从自定义文件导入数据时,。我的意思是,当我启动 celery 时,@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,试过了。这也行不通 【参考方案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(....)
...
...
【讨论】:
这也解决了我的问题,但我不明白为什么它会有所作为。你能详细说明一下吗? 可能有一些导入循环。以上是关于@shared_task 装饰器不起作用的主要内容,如果未能解决你的问题,请参考以下文章