我试图在使用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
同样,节拍过程开始,我可以看到消息已成功传递给工作人员,但无法弄清楚如何“注册”任务以便工作人员对其进行处理。
答案 0 :(得分:0)
我能够通过将应用程序从facebook-call
重命名为与文件FacebookAPICall
一致的方式来解决该问题
之前:
app = Celery('facebook-call', broker='amqp://localhost//'
之后:
app = Celery('FacebookAPICall', broker='amqp://localhost//'
通过阅读Celery文档,我不完全理解为什么应用程序的名称也必须是.py
文件的名称,但这似乎可以解决问题。