關於celery的worker執行過程中卡住的問題

2021-08-16 10:15:08 字數 444 閱讀 3435

celery兩種解決方式:

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

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

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

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

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

Celery 原始碼解析七 Worker 之間的互動

序列文章 前面對於 celery 的分布式處理已經做了一些介紹,例如第五章的遠端控制和第六章的event機制,但是,我認為這些分布式都比較簡單,並沒有體現出多例項之間的協同作用,所以,今天就來點更加複雜的,對於多例項直接的互動更多,這就是 gossip 和 mingle。在 celery 的介紹中,...

關於Celery 分布式任務佇列

celery 是 distributed task queue,分布式任務佇列,分布式決定了可以有多個 worker 的存在,佇列表示其是非同步操作,即存在乙個產生任務提出需求的工頭,和一群等著被分配工作的碼農。在 python 中定義 celery 的時候,我們要引入 broker,中文翻譯過來就...

執行緒池中的worker類(未完)

還沒認真看,先記下來這是乙個要看的點。執行緒池中的每乙個執行緒都被封裝成乙個worker物件,threadpool維護的是一組worker物件。繼承aqs,並實現了runnable介面 private final class worker extends abstractqueuedsynchron...