3
我有一個芹菜工作進程在celery.signals.worker_process_init
中爲外部服務器創建一個套接字。如果無法建立連接並且引發異常,則芹菜工作者無法啓動,這是預期的行爲。如何殺死芹菜工作進程以重啓進程
該套接字類別還使用threading.Timer
發送偶爾的心跳包。不幸的是,因爲Timer線程沒有特殊的異常處理,所以如果連接發生什麼事情,我的worker不會退出。
我開始從我的套接字讀取和寫入操作,並嘗試了一堆東西,優雅地停止當前的工作進程捕獲異常:
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)
但是芹菜工人主管過程進入快速旋轉過程,產生立即離開的芹菜工作者過程,而不是在幾次嘗試後放棄和死亡。
有沒有更好的方式來表示芹菜任務之外的芹菜工作者死亡過程?