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)
그러나 셀러리 작업자 감독자 프로세스는 몇 번의 시도 후에 포기하고 죽기보다는 즉시 종료되는 셀러리 작업자 프로세스를 빠르게 생성합니다.
셀러리 작업 외부에서 샐러리 작업자 프로세스가 종료되었음을 알리는 좋은 방법이 있습니까?