近日使用 Celery 队列系统构造服务,遇到队列任务无法执行的问题,经过排查找到原因,记录一下,防止日后忘记。

Celery 是一套使用Python开发的非常优秀的任务队列系统,稳定、高效,用途广泛。具体信息可以参考官网。

根据需求,我使用Celery做了多个队列,后期又准备加入定时执行任务。但是添加了必要的代码和配置之后,无论怎么测试,这个需要定时执行的任务都无法执行。

Celery 定时队列代码不执行,排查的思路和办法是摸索出来的。

任务代码打印log – 无效,因为根本没执行。主要是连错误信息也看不到,光猜测是不行的。

做了如下操作,使用日志系统输出到文件。因为celery队列会创建进程启动任务,要考虑进程隔离的问题。还有,使用调试模式启动celery,主要是加参数,还可以输出到文件。仍然没有看到任何信息。

我决定打开Redis查看一番,因为这个celery使用了Redis服务器作为broker,相关的执行情况会存储在Redis系统里面。

打开具体的任务记录条目,发现了线索:需要执行的任务代码,没有注册,报告了错误。

然后就开始排查,为何任务没有注册上。最后发现,在同时使用任务路由系统的时候(task route),注册的key值不正确,普通的任务直接写函数名就可以,但是标记为”beat” 类型的周期任务,必须全路径注册,前面的模块包名称不能省略。

添加好之后,再次测试,celery的debug信息有输出了,具体执行错误信息也有了。代码执行的log也有了内容,至此排查结束,问题解决。

如果使用github是违法犯罪,那可就麻烦了
在技术什么叫“套壳”行为?