Как запустить группу задач сельдерея? Приложения еще не загружены - PullRequest
0 голосов
/ 10 октября 2019

Например, у меня есть две задачи: a и b. Мне нужно запустить их параллельно. Я создаю группу задач и пытаюсь ее запустить. Но я получаю сообщение об ошибке

proj / app / tasks.py

@app.task
def a():
    pass

@app.task
def b():
    pass

django.core.exceptions.AppRegistryNotReady: приложения еще не загружены.

Приложение app зарегистрировано в INSTALLED_APPS, и вся миграция завершена

proj / proj / __ init __. Py

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)

proj / proj / celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()

Traceback

File "/home/m0nte-cr1st0/test_projects/proj/proj/__init__.py", line 5, in <module>
    from .celery import app as celery_app
File "/home/m0nte-cr1st0/test_projects/proj/proj/celery.py", line 26, in <module>
    from app.tasks import a, b
File "/home/m0nte-cr1st0/test_projects/proj/app/tasks.py", line 14, in <module>
    from .models import Link, Prediction, PredictionBK
File "/home/m0nte-cr1st0/test_projects/proj/app/models.py", line 2, in <module>
    from django.contrib.auth.models import AbstractUser

Ответы [ 4 ]

1 голос
/ 10 октября 2019

Здесь есть две проблемы.

Во-первых, вам не следует импортировать другие задачи - для этого app.autodiscover_tasks(). Удалите строку from app.tasks import a, b

Во-вторых, вы не должны звонить run_group. Это для случаев, когда вы хотите запускать задачи в группе.

1 голос
/ 10 октября 2019

Убедитесь, что вы делаете следующее:

  • перезагрузите свой сервер

  • сбросьте свой рабочий пул сельдерея

Если это не решит проблему, дайте мне знать.

Кроме того, вам не нужен from __future__ import absolute_import, unicode_literals. Это используется только для совместимости с python2.

Обновление

Я только что понял, что вы импортируете их в свой файл сельдерея (не уверен, сможете ли вы это сделать). Попробуйте удалить импорт задачи, затем попробуйте запустить задачу в оболочке django (запустите ./manage.py shell).

0 голосов
/ 10 октября 2019

proj / proj / celery.py

import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

proj / proj / settings.py

REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'

proj / proj / __ init __. py

from .celery import app as celery_app

proj / app / tasks.py

from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
0 голосов
/ 10 октября 2019

измените proj/proj/celery.py на это:


from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

import django
django.setup()

from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...