일부 데이터 분석을 처리 할 수있는 GCE 서버 설정이 있습니다. 나는 twisted
을 사용하여 ws
을 통해 그것과 통신 할 수있다. 나는이 서버의 유일한 클라이언트이다. 이 클라이언트의 연결을 처리하기 때문에신호 분석기에서 비틀어 진 반응기를 강제로 닫습니다.
spawn_multiprocessing_hierarchy()
reactor.run() # Blocks main thread
stop_everything_and_cleanup()
, reactor
무시 (혹은 무기한 연기?)합니다 SIGTERM
:
시스템은 다음과 같이 설정입니다. 그러나 시스템의 다른 모든 부분은 내결함성이 있으며 reactor
결코 중요한 데이터를 처리합니다. 이는 모니터링 목적으로 만 존재합니다. 이것은 내가 쉽게 SIGKILL
이 될 수 있다는 것을 의미한다. 다른 실행을위한 것이 아니었다. multiprocess.Process
다음 발사에서 마지막으로 멈 췄던 곳에서 계속할 수 있도록 메모리에 데이터를 덤프해야한다.
SIGTERM
을 즉시 (반응기에서 작업 실행을 기다리지 않고) 연결을 끊고 반응기를 중지 할 수 있습니까?
작업이 진행 중이므로 내 원자로가 멈추지 않는다는 것을 알고 있습니다. 단 하나의 클라이언트 만 서버에 연결되었다는 것을 감안할 때, 나는 서버에서 동시에 실행될 필요가 있기 때문에 원자로가 매우 긴 작업을 수행하도록하는 것이 좋습니다. 원자로가 임무 수행에 중요한 역할을하지 않기 때문에 원자로가 떨어지게하고 싶습니다. 필요할 때 시스템 출구를 지연시키고 있습니다. – Mirac7
이 문제를 해결하는 방법 중 하나는 Twisted (즉''reactor.spawnProcess'',''task.deferToThread'',''threads.callInThread'' 등)를 통해 프로세스를 생성하는 것이 아니라 프로세스 객체를 수동으로 관리하고' 'daemon = True''. 이렇게하면 Twisted는 스레드/프로세스를 신경 쓰지 않고 앱이 멈 추면 단순히 "죽습니다". –