关于长时间运行的 rqworker

2014-03-14 09:12:12 +08:00
 Livid
最近发现一个奇怪的问题,貌似如果一个 rqworker 运行的时间太长,就会丢失 queue 的名字?也就是从 rqinfo 里看的话,那个 worker 背后是没有名字的。

有人也遇到过这个问题么?
9500 次点击
所在节点    RQ
16 条回复
0bit
2014-03-14 09:25:21 +08:00
很少用rqinfo看,一直用的rq-dashboard来看,但是queue太多的话,页面可能会刷新不了。
humiaozuzu
2014-03-14 09:27:21 +08:00
话说 Livid 有用 rq 跑 schedule 嘛?还是都用 crontab 做的?
geew
2014-03-14 09:52:43 +08:00
@humiaozuzu rq 可以在程序里调用添加的 crontab也行吗?
humiaozuzu
2014-03-14 10:05:20 +08:00
@geew 这里他是单独开的一个进程跑 worker
https://github.com/ui/rq-scheduler
ericFork
2014-03-14 11:58:54 +08:00
借贴求教一下,有没有用 django-rq 的?你们是如何起多个 worker 的?
muxi
2014-03-14 12:03:08 +08:00
rq scheduler 不能删除,这个很蛋疼
BeanYoung
2014-03-14 12:38:53 +08:00
估计是任务超时 任务执行代码里没有对JobTimeException处理 超时后依然在运行 导致worker的信息在redis里过期
Livid
2014-03-14 12:52:22 +08:00
@BeanYoung 多谢提示。这个确实是一个有可能发生的原因。
Sokos
2014-03-14 12:55:00 +08:00
遇到过, 和 @BeanYoung 说的情况一样。
Livid
2014-03-14 15:14:43 +08:00
@humiaozuzu 我是用 supervisord 来启动 rqworker。
zhy0216
2014-03-14 15:35:30 +08:00
@Livid 可以给rq加个sentry, 然后就知道具体错误位置了~
VYSE
2014-03-14 16:17:20 +08:00
@BeanYoung 不过我用默认的rqworker命令行, JobTimeoutException会被handle_exception处理,然后置为failed,enqueue得到的result也是能拿到JobTimeoutException,理论上这时queue还会正常工作。

从我这来看,消失的worker过段时间还会出现,可能是signal.alarm 超时信号没有返回到handler,rqworker还是等任务超时结束后才继续运行。
VYSE
2014-03-14 17:01:34 +08:00
@VYSE 果然是worker里的某个native ext直接忽略SIGINT/SIGALRM等信号,还是改rq开新进程monitor woker进程靠谱些。
Livid
2014-03-14 18:34:00 +08:00
@VYSE 给他们官方来一发 issue?

https://github.com/nvie/rq
VYSE
2014-03-14 19:50:10 +08:00
https://github.com/nvie/rq/issues/323
不过不报希望会搞定,上次报另外一个就直接close了.
Livid
2014-03-15 07:27:13 +08:00
所以我估计我这里问题的根源是,task 里的 requests 发的请求没有加 timeout 设置。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/104241

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX