天天看點

關于celery的worker運作過程中卡住的問題

Celery 

Solution for hanging workers 

兩種解決方式:

1. 如果确認是因為目前worker的并發是prefork(多程序),并且可能是由于死鎖原因造成!

    那麼可以使用 CELERYD_FORCE = True ,這樣可以有效防止死鎖。即使不是這個原因造成的,也盡量加上。

    注意:這種處理方式在4.0之後的版本不支援了,使用時需檢查版本,也可采用下面的方式

2. 第二種解決方式适用于大多數程序hanging的情況,可以使用time_limit參數,設定任務的執行逾時時間,當超過這個時間的話,就先生成新的程序,并通過信号将hanging的程序殺死。

    另外,如果配置中使用了act_late的參數數,需要配合broker_transport_options = {'visiblity_timeout': 10 *60 }使用,這樣,在task經過逾時時間之後如果還沒被ack, 就會被發送到其他worker去執行。如果沒設定ack_late,代表對執行結果并不關心,這個參數也就沒必要設定了

很有用的一片部落格連結:http://blog.csdn.net/woshiaotian/article/details/36422781