Декоратор @shared_task не работает

Проблема: декоратор @shared_task не работает, когда я импортирую данные из пользовательских файлов. Я имею в виду, что когда я запускаю сельдерей, все задачи под @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(....)
    ...
    ...

Почему?!?


person Stas Teitel    schedule 30.04.2017    source источник
comment
Вы написали этот код в tasks.py? Конечно, Celery распознает только tasks.py как задачу. см. также docs.celeryproject.org/en/latest/ ссылка/   -  person tell k    schedule 30.04.2017
comment
Ну конечно; естественно. В противном случае он не добавит @shared_task в список задач во втором примере.   -  person Stas Teitel    schedule 30.04.2017
comment
В первом примере можно ли импортировать models.foo?   -  person tell k    schedule 30.04.2017
comment
скажи к, пробовал. Это тоже не работает   -  person Stas Teitel    schedule 03.05.2017


Ответы (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(....)
    ...
    ...
person Stas Teitel    schedule 03.05.2017
comment
Это также решило мою проблему, но я не понимаю, почему это имеет значение. Можете ли вы уточнить? - person leros; 13.09.2018
comment
Вероятно, какой-то цикл импорта. - person Stas Teitel; 18.09.2018