兩種解決方式:
- 如果確認是應爲當前worker的併發是prefork(多進程),並且可能是由於死鎖原因造成!
那麼可以使用 CELERYD_FORCE = True ,這樣可以有效防止死鎖。即使不是這個原因造成的,也儘量加上。
注意:這種處理方式在4.0之後的版本不支持了,使用時需檢查版本,也可採用下面的方式
- 第二種解決方式使用與大多數進程hanging的情況,可以使用time_limit參數,設定任務的執行超時時間,當超過這個時間的話,就先生成新的進程,並通過信號將hanging的進程殺死。
另外,如果配置中使用了act_late的參數數,需要配合broker_transport_options = {‘visiblity_timeout’: 10 *60 }使用,這樣,在task經過超時時間之後如果還沒被ack, 就會被髮送到其他worker去執行。如果沒設置ack_late,代表對執行結果並不關心,這個參數也就沒必要設置了