簡體   English   中英

如何殺死 celery 工作進程以重新啟動進程

[英]How to kill celery worker process for process restart

我有一個 celery 工作進程,它在celery.signals.worker_process_init為外部服務器創建一個套接字。 如果無法建立連接並引發異常,則芹菜工人無法啟動,這是預期的行為。

該套接字類還使用threading.Timer偶爾發送心跳包。 不幸的是,因為 Timer 線程沒有特殊的異常處理,如果連接發生問題,我的工作人員不會退出。

我開始從我的套接字讀寫操作中捕獲異常,並嘗試了很多方法來優雅地停止當前的工作進程:

sys.exit(1)  # Doesn't kill the worker process (because it's running in a thread?)

下一次嘗試,我在celery/billiard問題的某處看到它提到:

raise SystemExit("Socket error")  # Same, I guess

這有效:

os.kill(os.getpid(), signal.SIGHUP)

但是 celery worker supervisor 進程進入快速旋轉,創建立即退出的 celery worker 進程,而不是在幾次嘗試后放棄並死亡。

有沒有更好的方法來從 celery 任務外部發出 celery 工作進程的死亡信號?

我有類似的問題。 我最終創建了一個單獨的腳本來管理工人。

創建一個無限的 while 循環,休眠所需的時間,然后創建/殺死工作進程。

while True:
    time.sleep(5)
    # create workers if possible
    # kill stale workers if not required.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM