在使用Ctlr-C键盘中断向Celery工作人员发出TERM信号两次(暖关机和冷关机)后,Celery工作人员才挂断电话.它不消耗消息或执行任务(如预期的那样),但它也没有关闭.
我跑strace
了Celery进程,看看幕后发生了什么.这是strace
Celery主过程的PID输出
strace -p 27867
Process 27867 attached - interrupt to quit
futex(0xb966a78, FUTEX_WAIT, 0, NULL
Run Code Online (Sandbox Code Playgroud)
以下是我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
......................................................
Run Code Online (Sandbox Code Playgroud)
我知道我可以向进程发出一个KILL信号来摆脱它们.但是我很想知道究竟是什么阻止了这些进程被关闭,以及是否有可能对它做些什么.
软件堆栈:Python 2.6.2,Celery 2.4.6,CentOS 5.0
更新:CPU使用率降至几乎0%.这些任务非常占用CPU,因此确认当前没有任何任务处于活动状态.
来自文档:
\n\n\n\n\n如果工作线程在适当的时间后\xe2\x80\x99t关闭,例如\n由于任务陷入无限循环,则可以使用 KILL\n 信号强制终止工作线程,但请注意,当前\n正在执行的任务将会丢失(除非任务设置了 acks_late\n 选项)。
\n
也来自谷歌群组:
\n\n\n\n在处理完所有活动任务之前,celeryd 不会关闭,其中“活动”表示已启动的任务(并非所有保留任务)。连接通道关闭后,保留的消息将被释放并重新传送。这会在活动任务返回后发生。如果你没有启用 --time-limit ,celeryd 永远不会在关闭时终止你的任务,即使它们需要几天才能完成。
\n
归档时间: |
|
查看次数: |
3652 次 |
最近记录: |