2016-05-13 4 views
14

Рассмотрим Баш сессию:Как управлять статусом/цветка сельдерея без опции -A?

$ export DJANGO_SETTINGS_MODULE=web.settings 
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 
Error: No nodes replied within time constraint. 
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 -A scaffold.tasks.celery_app 
[email protected]: OK 

Зачем мне нужен вариант -A? Насколько я могу судить, сельдерей должен уметь обнаруживать необходимые метаданные на redis.

Аналогично, если я запустил celery flower -b <redis url>, он показывает, что он успешно соединяется с redis, но не показывает реальных работников/задач/очередей и показывает несколько сообщений, таких как 'stats' inspect method failed. Опять же, добавление -A заставляет его работать.

Я хочу запустить цветок в минимальном автономном контейнере Docker, который не содержит ни моего кода, ни его зависимостей. Несколько репозиториев, таких как this one, предлагают такие вещи. Итак, как я могу это сделать? Связанное репо предлагает множество опций, но не позволяет указать опцию -A, что предполагает, что это необязательно.

Я начинающий сельдерей, поэтому, возможно, мне не хватает чего-то глупого. Что я должен сделать?

Модуль scaffold.tasks.celery_app просто выглядит следующим образом:

from celery import Celery 
from django.conf import settings 

app = Celery() 
app.config_from_object(settings) 

И эти настройки Django, которые включают сельдерей:

{'BROKER_HEARTBEAT': 0, 
'BROKER_TRANSPORT_OPTIONS': {'fanout_patterns': True, 
           'fanout_prefix': True, 
           'visibility_timeout': 172800}, 
'BROKER_URL': 'redis://redis.businessoptics.dev:6379/1', 
'CELERYBEAT_SCHEDULE': {'journey-heartbeat': {'args':(), 
               'schedule': <crontab: * * * * * (m/h/d/dM/MY)>, 
               'task': 'kms.data.journey.tasks.heartbeat'}}, 
'CELERYD_CONCURRENCY': 1, 
'CELERYD_HIJACK_ROOT_LOGGER': False, 
'CELERYD_LOG_COLOR': False, 
'CELERYD_MAX_TASKS_PER_CHILD': 1, 
'CELERYD_PREFETCH_MULTIPLIER': 1, 
'CELERY_ACCEPT_CONTENT': ['pickle'], 
'CELERY_ACKS_LATE': True, 
'CELERY_DEFAULT_EXCHANGE': 'default', 
'CELERY_DEFAULT_EXCHANGE_TYPE': 'direct', 
'CELERY_DEFAULT_QUEUE': 'default', 
'CELERY_DEFAULT_ROUTING_KEY': 'default', 
'CELERY_IGNORE_RESULT': False, 
'CELERY_IMPORTS': ['kms.knowledge.query.tasks2', 
        # names of several more modules... 
        ], 
'CELERY_QUEUES': [<unbound Queue tablestore -> <unbound Exchange default(direct)> -> kms.data.table_store.tasks.#>, 
        # several more similar-looking Queues... 
        <unbound Queue default -> <unbound Exchange default(direct)> -> default>], 
'CELERY_REDIRECT_STDOUTS': False, 
'CELERY_RESULT_BACKEND': 'database', 
'CELERY_RESULT_DBURI': 'mysql://businessoptics:[email protected]:3306/product', 
'CELERY_RESULT_DB_SHORT_LIVED_SESSIONS': True, 
'CELERY_ROUTES': ['scaffold.tasks.routers.TaskNameRouter'], 
'CELERY_SEND_EVENTS': True, 
'CELERY_SEND_TASK_ERROR_EMAILS': False, 
'CELERY_SEND_TASK_SENT_EVENT': True, 
'CELERY_STORE_ERRORS_EVEN_IF_IGNORED': True, 
'CELERY_TASKNAME_ROUTES': [('tablestore', 'kms.data.table_store.tasks.#'), 
          # bunch of routes... 
          ], 
'CELERY_TASK_RESULT_EXPIRES': None, 
'CELERY_TIMEZONE': 'UTC', 
'CELERY_TRACK_STARTED': True, 
'CELERY_WORKER_DIRECT': True 
} 

Ниже приведены соответствующие версии:

celery==3.1.19 
Django==1.8 
django-celery==3.1.0 
redis==2.10.3 
+0

для меня 'flower --port = 5555 --broker = 'redis: // ...'' работа без прохождения '-A' – ahmed

ответ

5

Опция - опция, которая передает экземпляр сельдерея с соответствующей конфигурацией i ncluding пакет, содержащий ваши задачи.

Чтобы использовать все функции, цветы должны быть сконфигурированы как работник, это означает знание пакета, в котором выполняются ваши задачи по сельдерее, и зная их.

Добавить в свой Docker контейнер необходимое питон Lib не должно быть трудно, например, вы можете добавить в this file линия конфигурации CELERY_IMPORTS следующим образом:

CELERY_IMPORTS = os.getenv('CELERY_IMPORTS ', 'default.package') 

UPDATE

В качестве @asksol, создателя сельдерея, в комментариях было указано более подробное объяснение того, почему вам нужна опция -A:

Цветок также является потребителем сообщения, поэтому он поможет восстановить незакрепленные сообщения. Поскольку у вас есть настраиваемая видимость, начиная с неконфигурированного цветка, он будет использовать тайм-аут видимости по умолчанию и, таким образом, будет перенаправлять незакрепленные сообщения быстрее, чем ваши работники. Всегда используйте -A, чтобы синхронизация рабочего, цветка и клиента

+0

Можете ли вы объяснить, почему ахмед, который прокомментировал мой вопрос, не должен передавать этот вариант? –

+0

Вы должны спросить его не меня. –

+0

Мой оригинальный вопрос сводится к тому, «как он это сделал», поэтому, если он знал, что я думаю, что он скажет мне. Я хочу сказать, что ясно, что этот вариант не всегда нужен, и ваш ответ говорит мне, что это так. –

 Смежные вопросы

  • Нет связанных вопросов^_^