@shared_task 装饰器不起作用

问题描述 投票:0回答:2

问题:当我从自定义文件导入数据时,@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(....)
    ...
    ...

为什么?!?

django celery celery-task cookiecutter-django
2个回答
4
投票

该问题的解决方案是将

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(....)
    ...
    ...

0
投票

在我的例子中,@shared_task 的方法已在 celery 任务中列出,但它没有正确传递给代理(我使用了 redis 代理)。
但是当调用tasks.py中的@app.task(注意:app是从project_folder.celery.py导入)装饰器方法时,它工作正常。

我发现的另一个解决方案是在tasks.py中导入project_folder.celery,即使它没有被使用,然后使用@shared_task装饰器。

© www.soinside.com 2019 - 2024. All rights reserved.