Как исправить ошибку получения незарегистрированной задачи - Celery

Я пытаюсь установить периодическую задачу, используя Celery (4.2.0) и RabbitMQ (3.7.14), работающие с Python 3.7.2 на виртуальной машине Azure с использованием Ubuntu 16.04. Я могу запустить такт и рабочий и вижу, как сообщение отправляется от тактового к рабочему, но в этот момент я встречаюсь с ошибкой, подобной этой

[2019-03-29 21:35:00,081: ERROR/MainProcess] Received 
unregistered task of type 'facebook-call.facebook_api'.
The message has been ignored and discarded.

Did you remember to import the module containing this task?
Or maybe you're using relative imports?

Мой код выглядит следующим образом:

from celery import Celery
from celery.schedules import crontab

app = Celery('facebook-call', broker='amqp://localhost//')

@app.task
def facebook_api():
    {function here}

app.conf.beat.schedule = {
    'task': 'facebook-call.facebook_api',
    'schedule': crontab(hour=0, minute =0, day='0-6'),
}

Я запускаю битовые и рабочие процессы, используя имя файла python, который содержит весь код.

celery -A FacebookAPICall beat --loglevel=info
celery -A FacebookAPICall worker --loglevel=info

Снова запускается процесс бита, и я вижу, что сообщение успешно передается воркеру, но не могу понять, как «зарегистрировать» задачу, чтобы она обрабатывалась воркером.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
246
1

Ответы 1

Я смог решить проблему, переименовав приложение с facebook-call, чтобы оно совпадало с именем файла FacebookAPICall

До: app = Celery('facebook-call', broker='amqp://localhost//'

После: app = Celery('FacebookAPICall', broker='amqp://localhost//'

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

Другие вопросы по теме