[英]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.