Сельдерей подключается к rabbitmq-серверу вместо redis-сервера - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть приложение Django, которое я хочу настроить на сельдерее для запуска фоновых задач.

Пакеты:

  1. сельдерея == 4.2.1

  2. Django == 2.1.3

  3. Python == 3,5

  4. Redis-сервер == 3.0.6

Конфигурация сельдерея в settings.py Файл:

CELERY_BROKER_URL = 'redis://localhost:6379'

CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Kolkata'
CELERY_BEAT_SCHEDULE = {
    'task-number-one': {
            'task': 'app.tasks.task_number_one',
            'schedule': crontab(minute='*/1'),
    },
}

И celery.py Файл:

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings.prod')

app = Celery('project')

# Using a string here means the worker don't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings')

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


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

Когда я запускаю: celery -A project worker -l info -B -E

Он указывает на сервер rabmmitmq, вместо этого он должен указывать на redis-сервер, как показано ниже:

 -------------- celery@user-desktop v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.15.0-39-generic-x86_64-with-Ubuntu-18.04-bionic 2018-11-21 12:04:51
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         project:0x7f8b80f78d30
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: ON
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . app.tasks.task_number_one
  . project.celery.debug_task

[2018-11-21 12:04:51,741: INFO/Beat] beat: Starting...

То же самоепроизошло в производственной среде.На производстве я развернул приложение Django с Gunicorn и Nginx, и теперь я хочу реализовать какой-то метод для запуска фоновых задач, так как пакет django-crontab не работает.

Проблема:

  1. В чем проблема с конфигурацией сельдерея?

  2. Может ли кто-нибудь порекомендовать способ запуска периодической фоновой задачи?

** Примечание. Я попытался реализовать супервизор, но кажется, что супервизор несовместим с python3, и поэтому не смог его настроить.

Ответы [ 4 ]

0 голосов
/ 14 июля 2019

Если вы скопировали содержимое celery.py с официального сайта сельдерея https://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

, попробуйте изменить следующую строку с

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

на

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

0 голосов
/ 22 ноября 2018

Настройка для URL-адреса брокера изменена в v4 .Это должно быть BROKER_URL, а не CELERY_BROKER_URL.

0 голосов
/ 25 июня 2019

Заменить CELERY_BROKER_URL = 'redis://localhost:6379' на BROKER_URL = 'redis://localhost:6379'.Это сработало для меня.

0 голосов
/ 21 ноября 2018

Чтобы заставить сельдерей работать с Redis, вам необходимо установить дополнительные зависимости.

pip install -U "celery[redis]"

Пожалуйста, просмотрите документацию по сельдерею .

...