я борюсь с сельдерей не делать то, что утверждает, что его документация: У меня есть Джанго 1.9 приложения, и я бегу сельдерей 3.1.20 и у меня есть следующие:Джанго 1.9: CELERY_IMPORTS не работает
MYAPP/сельдерея .py:
from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
from django.conf import settings # noqa
app = Celery('myapp')
app.config_from_object('django.conf:settings')
MyApp/работы/tasks.py:
from myapp.celery import app
class Job1(app.Task):
...
name = 'job_1'
...
class Job2(app.Task):
...
name = 'job_2'
...
Однако, я пытался как:
MyApp/settings.py:
CELERY_IMPORTS = ('myapp.jobs.tasks',)
и
MyApp/celery.py:
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
и ни регистрируете свои задачи должным образом. Задачи появляются только в app.tasks, как только я вручную импортирую модуль, который определяет задачи, поэтому я должен был сделать уродливый локальный импортный взлом, когда я использую задачу для обеспечения ее загрузки.
В Джанго оболочки:
In [1]: from myapp.celery import app
In [2]: app.tasks
Out[2]:
{'celery.backend_cleanup': <@task: celery.backend_cleanup of myapp:0x10dc260d0>,
'celery.chain': <@task: celery.chain of myapp:0x10dc260d0>,
'celery.chord': <@task: celery.chord of myapp:0x10dc260d0>,
'celery.chord_unlock': <@task: celery.chord_unlock of myapp:0x10dc260d0>,
'celery.chunks': <@task: celery.chunks of myapp:0x10dc260d0>,
'celery.group': <@task: celery.group of myapp:0x10dc260d0>,
'celery.map': <@task: celery.map of myapp:0x10dc260d0>,
'celery.starmap': <@task: celery.starmap of myapp:0x10dc260d0>}
In [3]: app.conf['CELERY_IMPORTS']
Out[3]: ('myapp.jobs.tasks',)
In [4]: from myapp.jobs import tasks
In [5]: app.tasks
Out[5]:
{'celery.backend_cleanup': <@task: celery.backend_cleanup of myapp:0x10dc260d0>,
'celery.chain': <@task: celery.chain of myapp:0x10dc260d0>,
'celery.chord': <@task: celery.chord of myapp:0x10dc260d0>,
'celery.chord_unlock': <@task: celery.chord_unlock of myapp:0x10dc260d0>,
'celery.chunks': <@task: celery.chunks of myapp:0x10dc260d0>,
'celery.group': <@task: celery.group of myapp:0x10dc260d0>,
'celery.map': <@task: celery.map of myapp:0x10dc260d0>,
'celery.starmap': <@task: celery.starmap of myapp:0x10dc260d0>,
'job_1': <@task: job_1 of myapp:0x10dc260d0>,
'job_2': <@task: job_2 of myapp:0x10dc260d0>,
'job_3': <@task: job_3 of myapp:0x10dc260d0>}
Любые идеи, что здесь происходит? Он просто не загружает задачи, пока я сам не импортирую модуль.
Заранее благодарен.
FTR В основном я вижу @ app.task (...) синтаксис для объявления задач, поэтому, чтобы выяснить, почему я использую классы, у меня есть несколько параметров, настроенных на них, которые я не могу сделать/запутаться, если я используйте декоратор; такие вещи, как time_limit, max_retries и т. п., а также некоторые утилиты для задач, которые делают классы более удобными. –