Solution for hanging workers (Celery)

Celery文檔

兩種解決方式:

  1. 如果確認是應爲當前worker的併發是prefork(多進程),並且可能是由於死鎖原因造成!

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

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

  1. 第二種解決方式使用與大多數進程hanging的情況,可以使用time_limit參數,設定任務的執行超時時間,當超過這個時間的話,就先生成新的進程,並通過信號將hanging的進程殺死。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章