如何解决接收未注册的任务错误-Celery

时间:2019-03-30 00:28:03

标签: python linux rabbitmq celery

我试图在使用Ubuntu 16.04的Azure VM上使用在Python 3.7.2上运行的Celery(4.2.0)和RabbitMQ(3.7.14)建立定期任务。我能够启动节拍和工作程序,并看到从节拍开始向工作人员发送的消息,但是此时我遇到了这样的错误

<?php
function exception_handler($e) {
  echo "MyUncaughtException: " , $e->getMessage(), "\n";
}

set_exception_handler('exception_handler');

我的代码如下:

[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?

我正在使用包含所有代码的python文件的名称来启动节拍和辅助进程

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'),
}
celery -A FacebookAPICall beat --loglevel=info

同样,节拍过程开始,我可以看到消息已成功传递给工作人员,但无法弄清楚如何“注册”任务以便工作人员对其进行处理。

1 个答案:

答案 0 :(得分:0)

我能够通过将应用程序从facebook-call重命名为与文件FacebookAPICall一致的方式来解决该问题

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

之后: app = Celery('FacebookAPICall', broker='amqp://localhost//'

通过阅读Celery文档,我不完全理解为什么应用程序的名称也必须是.py文件的名称,但这似乎可以解决问题。