나는 다중 처리 모듈을 사용하여 5 개의 다른 파이썬 프로세스를 생성하는 파이썬 프로세스를 가지고있다. 상위 프로세스 P0과 다른 프로세스 P1-P5를 호출 해 봅시다. 요구 사항은 P0에 SIGTERM을 보내면 먼저 P1에서 P5로 종료 한 다음 자체 종료해야한다는 것입니다.세마포어를 기다리는 동안 SIGTERM을받은 후 파이썬 프로세스가 어떻게 정상적으로 종료됩니까?
캐치는 P1과 P5가 세마포어를 기다리고 있습니다. 그래서 이러한 프로세스에 SIGTERM을 보내면 시그널 핸들러를 호출하고 종료합니다. 그러나 그들은 세마포어를 기다리고 있기 때문에 예외를 던집니다. 종료하기 전에 그 예외를 잡을 수있는 방법이 있습니까? P0에서 P5까지는 우아한 출구를 만들 수 있습니까?
역 추적 :
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
Process Process-2:
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
Process Process-5:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/opt/fireeye/scripts/mip/StaticAnalysisRunner.py", line 45, in run
qsem.acquire()
어떤 Python 버전을 사용하고 있습니까? P1과 P5가 실제로 만들어내는 특정 호출은 세마포어를 기다리고 있습니까? 추적 목록을 포함 할 수 있습니까? – dano
문제를 재현하는 최소한의 코드 샘플이 유용 할 것입니다. –
파이썬 2.7.8을 사용하고 있습니다. P1에서 P5까지는 프로세스간에 공유되는 큐에 액세스하려고 시도하며 세마포어를 사용하여 큐에 대한 액세스가 보호됩니다. 다음과 같은 의미로 사용됩니다. sem.acquire() item = q.get() sem.release() –