2016-01-18 53 views
0

我試着用這個命令優雅地關閉芹菜工人。芹菜工人的優雅關機

ps aux | grep celery\ worker | awk '{print $2}' | xargs kill -SIGINT 

但是,某些工作進程仍在拋出WorkerLostError。 這是芹菜工人日誌的一部分,其中一名工人被完成的任務

[2016-01-18 09:10:56,667: INFO/MainProcess] Received task: task[b83163b4-9fd6-4c06-88bb-8cf8fc98bb23] 
[2016-01-18 09:10:58,390: INFO/MainProcess] Received task: task[d5239190-2cea-4ee1-bac6-7600a9f05839] 
[2016-01-18 09:11:00,621: INFO/MainProcess] Received task: task[1139f6f8-31b5-449b-9425-0cf6943496d4] 
[2016-01-18 09:11:01,543: INFO/MainProcess] Received task: task[0547455c-83e4-4a9e-a0a5-e872afdbbc62] 
[2016-01-18 09:11:01,695: INFO/MainProcess] Received task: task[520b41da-7e3a-4c9d-a807-8e11aebd4bcd] 
[2016-01-18 09:11:02,286: INFO/MainProcess] Task task[d5239190-2cea-4ee1-bac6-7600a9f05839] succeeded in 3.8944714s: [] 

worker: Hitting Ctrl+C again will terminate all running tasks! 

worker: Warm shutdown (MainProcess) 
[2016-01-18 09:11:04,451: INFO/MainProcess] Task task[520b41da-7e3a-4c9d-a807-8e11aebd4bcd] succeeded in 2.754699837s: [] 
[2016-01-18 09:11:04,497: ERROR/MainProcess] Task task[b83163b4-9fd6-4c06-88bb-8cf8fc98bb23] raised unexpected: WorkerLostError('Worker exited prematurely: exitcode 0.',) 
Traceback (most recent call last): 
    File "/usr/lib/python2.6/site-packages/billiard-3.3.0.22-py2.6.egg/billiard/pool.py", line 1175, in mark_as_worker_lost 
    human_status(exitcode)), 
WorkerLostError: Worker exited prematurely: exitcode 0. 
[2016-01-18 09:11:05,500: INFO/MainProcess] Task task[1139f6f8-31b5-449b-9425-0cf6943496d4] succeeded in 4.877286218s: [] 
[2016-01-18 09:11:06,002: INFO/MainProcess] Task task[0547455c-83e4-4a9e-a0a5-e872afdbbc62] succeeded in 4.457699244s: [] 
-------------- [email protected] v3.1.19 (Cipater) 
---- **** ----- 
--- * *** * -- Linux-3.14.26-24.46.amzn1.x86_64-x86_64-with-glibc2.2.5 

回答

-2

這不是一個非常優雅的方式來關機工人殺害前。

我建議使用supervisord來管理你的工人 - 芹菜sources中有一個示例配置文件,你可以用它作爲起點。

+0

supervisord如何殺死工作進程? – Rajs123

0

下面的代碼片段將優雅地關閉一個工人。即一旦正在執行的作業完成,工人將被關閉。

from celery import Celery 
celery = Celery('vwadaptor', broker='redis://workerdb:6379/0',backend='redis://workerdb:6379/0') 
celery.control.broadcast('shutdown', destination=[<celery_worker_name>])