7

排查 Celery 队列的任务问题

 6 months ago
source link: https://acejoy.com/2023/09/26/726/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

排查 Celery 队列的任务问题

2023/9/26 0 Comments 198 Views 0 Times

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

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

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

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

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

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

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK