Как исправить ошибку при получении незарегистрированной задачи - Celery - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь установить периодическую задачу, используя 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

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

1 Ответ

0 голосов
/ 30 марта 2019

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

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

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

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

...