为什么芹菜不能干净地关闭?

时间:2012-04-02 06:11:57

标签: python celery

使用Ctlr-C键盘中断向Celery工作人员发出两次TERM信号(热关机和冷关机)后,Celery工作人员才挂断电话。它不消耗消息或执行任务(如预期的那样),但它也没有关闭。

我在Celery进程上运行strace,看看幕后发生了什么。这是Celery主进程PID的strace输出

strace -p 27867
Process 27867 attached - interrupt to quit
futex(0xb966a78, FUTEX_WAIT, 0, NULL

这就是我在子进程中发现的strace

strace -p 27874
Process 27874 attached - interrupt to quit
select(4, [3], NULL, NULL, {0, 562000}) = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1)         = 0
select(4, [3], NULL, NULL, {1, 0})      = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1)         = 0
......................................................

我知道我可以向进程发出一个KILL信号来摆脱它们。但我很想知道究竟是什么阻止了这些进程被关闭,以及是否有可能对它做些什么。

软件堆栈:Python 2.6.2,Celery 2.4.6,CentOS 5.0

更新:CPU使用率降至近0%。这些任务非常占用CPU,因此确认当前没有任何任务处于活动状态。

1 个答案:

答案 0 :(得分:3)

来自docs

  

例如,如果工人在考虑周到的时间后不会关机   由于任务卡在无限循环中,您可以使用KILL   信号强制终止工人,但要注意当前   执行任务将丢失(除非任务具有acks_late   选项集。)

同样来自google groups

  

在处理完所有活动任务之前,芹菜不会关闭   其中,active表示已启动的任务(并非全部   保留的任务)。保留的消息将被释放   连接通道关闭后重新传送。有时候是这样的   活动任务返回后。如果你没有   --time-limit启用celeryd永远不会在关机时终止你的任务,即使他们需要DAYS完成。

相关问题