Как начать удаленную работу сельдерея с django - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь использовать django в сочетании с сельдереем.

Поэтому я наткнулся на autodiscover_tasks() и не совсем уверен, как их использовать. Рабочие сельдерея получают задачи, добавленные другими приложениями (в данном случае серверной частью узла).

До сих пор я использовал это для запуска рабочего:

celery worker -Q extraction --hostname=extraction_worker

, который отлично работает.

Я не совсем понимаю, в чем заключается общая идея интеграции django -celery. Должны ли рабочие по-прежнему запускаться из внешнего источника (например, с помощью приведенной выше команды) или они должны управляться и запускаться из приложения django?

Мой celery.py выглядит так:

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main.settings')

app = Celery('app')

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

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

тогда у меня есть 2 приложения, содержащие файл tasks.py с:

@shared_task
def extraction(total):
    return 'Task executed'

как я могу теперь зарегистрировать django для регистрации рабочего для этих задач?

1 Ответ

1 голос
/ 29 мая 2020

Вы просто запускаете рабочий процесс как задокументированный , вам не нужно ничего регистрировать

В производственной среде вы захотите запустить рабочий в фоновом режиме в качестве демона - см. Демонизация - но для тестирования и разработки полезно иметь возможность запускать рабочий экземпляр с помощью команды celery worker manage, так же, как вы использовали бы сервер запуска Django manage.py:

celery -A proj worker -l info

Чтобы получить полный список доступных параметров командной строки, используйте команду help:

celery help

celery worker собирает / регистрирует задачу при ее запуске, а также использует задачи, которые он обнаружил

...