Сельдерей получил незарегистрированное задание типа (пример запуска) - PullRequest
77 голосов
/ 19 марта 2012

Я пытаюсь запустить пример из документации Celery.

Я бегу: celeryd --loglevel=INFO

/usr/local/lib/python2.7/dist-packages/celery/loaders/default.py:64: NotConfigured: No 'celeryconfig' module found! Please make sure it exists and is available to Python.
  "is available to Python." % (configname, )))
[2012-03-19 04:26:34,899: WARNING/MainProcess]  

 -------------- celery@ubuntu v2.5.1
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      amqp://guest@localhost:5672//
- ** ----------   . loader:      celery.loaders.default.Loader
- ** ----------   . logfile:     [stderr]@INFO
- ** ----------   . concurrency: 4
- ** ----------   . events:      OFF
- *** --- * ---   . beat:        OFF
-- ******* ----
--- ***** ----- [Queues]
 --------------   . celery:      exchange:celery (direct) binding:celery

tasks.py:

# -*- coding: utf-8 -*-
from celery.task import task

@task
def add(x, y):
    return x + y

run_task.py:

# -*- coding: utf-8 -*-
from tasks import add
result = add.delay(4, 4)
print (result)
print (result.ready())
print (result.get())

В той же папке celeryconfig.py:

CELERY_IMPORTS = ("tasks", )
CELERY_RESULT_BACKEND = "amqp"
BROKER_URL = "amqp://guest:guest@localhost:5672//"
CELERY_TASK_RESULT_EXPIRES = 300

Когда я запускаю «run_task.py»:

на консоли Python

eb503f77-b5fc-44e2-ac0b-91ce6ddbf153
False

ошибки на сервере celeryd

[2012-03-19 04:34:14,913: ERROR/MainProcess] Received unregistered task of type 'tasks.add'.
The message has been ignored and discarded.

Did you remember to import the module containing this task?
Or maybe you are using relative imports?
Please see http://bit.ly/gLye1c for more information.

The full contents of the message body was:
{'retries': 0, 'task': 'tasks.add', 'utc': False, 'args': (4, 4), 'expires': None, 'eta': None, 'kwargs': {}, 'id': '841bc21f-8124-436b-92f1-e3b62cafdfe7'}

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/celery/worker/consumer.py", line 444, in receive_message
    self.strategies[name](message, body, message.ack_log_error)
KeyError: 'tasks.add'

Пожалуйста, объясните, в чем проблема.

Ответы [ 28 ]

0 голосов
/ 07 марта 2014

Решение для меня добавить эту строку в / etc / default / celeryd

CELERYD_OPTS="-A tasks"

Потому что, когда я запускаю эти команды:

celery worker --loglevel=INFO
celery worker -A tasks --loglevel=INFO

Только последняя команда вообще показывала имена задач.

Я также попытался добавить строку CELERY_APP / etc / default / celeryd, но это тоже не сработало.

CELERY_APP="tasks"
0 голосов
/ 19 июня 2019
app = Celery(__name__, broker=app.config['CELERY_BROKER'], 
backend=app.config['CELERY_BACKEND'], include=['util.xxxx', 'util.yyyy'])
0 голосов
/ 16 ноября 2016

Я обнаружил, что один из наших программистов добавил следующую строку в один из импортов:

os.chdir(<path_to_a_local_folder>)

Это привело к тому, что работник Celery изменил свой рабочий каталог из рабочего каталога проектов по умолчанию (гдеон может найти задачи) в другом каталоге (где он не может найти задачи).

После удаления этой строки кода все задачи были найдены и зарегистрированы.

0 голосов
/ 13 апреля 2019

Напишите правильный путь к файлу задач

app.conf.beat_schedule = {
'send-task': {
    'task': 'appdir.tasks.testapp',
    'schedule': crontab(minute='*/5'),  
},

}

0 голосов
/ 30 апреля 2019

при запуске сельдерея с командой "celery -A conf worker -l info" все задачи были перечислены в журнале, как у меня , conf.celery.debug_task я получал ошибку, потому что я не давал точный путь к задаче. Поэтому, пожалуйста, перепроверьте это, скопировав и вставив точный идентификатор задачи.

0 голосов
/ 03 января 2018

Мои 2 цента

Я получал это в образе докера, используя alpine. Настройки django ссылаются на /dev/log для входа в системный журнал. Приложение django и работник из сельдерея были основаны на одном и том же изображении. Точка входа в образ приложения django запускалась при запуске syslogd, но для сельдерея - нет. Это приводило к сбою таких вещей, как ./manage.py shell, потому что /dev/log не было бы. Сельдерей не подведет. Вместо этого он просто игнорировал оставшуюся часть запуска приложения, которая включала загрузку shared_task записей из приложений в проекте django

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

Ответ на вашу проблему лежит в ПЕРВОЙ ЛИНИИ вывода, который вы предоставили в своем вопросе: /usr/local/lib/python2.7/dist-packages/celery/loaders/default.py:64: NotConfigured: No 'celeryconfig' module found! Please make sure it exists and is available to Python. "is available to Python." % (configname, ))). Без правильной конфигурации Celery не может ничего сделать.

Причина, по которой он не может найти celeryconfig, скорее всего, его нет в вашей PYTHONPATH.

0 голосов
/ 05 мая 2017

Просто добавьте мои два цента для моего дела с этой ошибкой ...

Мой путь /vagrant/devops/test с app.py и __init__.py в нем.

Когда я запускаюcd /vagrant/devops/ && celery worker -A test.app.celery --loglevel=info Я получаю эту ошибку.

Но когда я запускаю ее как cd /vagrant/devops/test && celery worker -A app.celery --loglevel=info, все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...