Я пытаюсь установить периодическую задачу, используя 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
Снова запускается процесс бита, и я вижу, что сообщение успешно передается воркеру, но не могу понять, как «зарегистрировать» задачу, чтобы она обрабатывалась воркером.






Я смог решить проблему, переименовав приложение с facebook-call, чтобы оно совпадало с именем файла FacebookAPICall
До:
app = Celery('facebook-call', broker='amqp://localhost//'
После:
app = Celery('FacebookAPICall', broker='amqp://localhost//'
Прочитав документацию Celery, я не совсем понимаю, почему имя приложения также должно быть именем файла .py, но, похоже, это помогает.