대상 기능에서 오류가 발생하면 다중 처리 스크립트를 종료하려고 시도하지만 종료하는 대신 상위 프로세스가 중지됩니다. 이것은 완벽하게 작동다중 처리 스크립트 종료
#!/usr/bin/python3.5
import time, multiprocessing as mp
def myWait(wait, resultQueue):
startedAt = time.strftime("%H:%M:%S", time.localtime())
time.sleep(wait)
endedAt = time.strftime("%H:%M:%S", time.localtime())
name = mp.current_process().name
resultQueue.put((name, wait, startedAt, endedAt))
# queue initialisation
resultQueue = mp.Queue()
# process creation arg: (process number, sleep time, queue)
proc = [
mp.Process(target=myWait, name = ' _One_', args=(2, resultQueue,)),
mp.Process(target=myWait, name = ' _Two_', args=(2, resultQueue,))
]
# starting processes
for p in proc:
p.start()
for p in proc:
p.join()
# print results
results = {}
for p in proc:
name, wait, startedAt, endedAt = resultQueue.get()
print('Process %s started at %s wait %s ended at %s' % (name, startedAt, wait, endedAt))
, 내가 부모 스크립트가 htop
두 자식 프로세스를 산란을 볼 수 있지만 내가 부모 스크립트를 강제로 할 때 종료 :
이
내가 문제를 복제하는 데 사용하는 테스트 스크립트입니다myWait
대상 함수에서 오류가 발생하면 상위 프로세스가 중지되고 하위 프로세스가 생성되지 않습니다. 나는 그것을 죽일
ctrl-c
해야합니다.
def myWait(wait, resultQueue):
try:
# do something wrong
except:
raise SystemExit
나는 아무 소용 기능을 (예를 들어 exit()
, sys.exit()
, os._exit()
...) 종료하기 위해 모든 방법을 시도했다.
'get (block = False)'트릭을했습니다. 귀하의 _quick'n'dirty 수정 _하지만 멀티 프로세싱 lib에서 다른 오류가 발생하지만, 확실히 거기에 도착이야. 감사. – ripat
사실, 파이썬 3.4를 사용하여이 코드 스 니펫을 실행했지만 실제로 3.5를 변경하면 영향을받지 않는 것으로 보입니다. 내 편에서는'raise Exception ("error!")'줄을 자발적으로 던진 예외를 제외하고는 어떤 에러도 발생하지 않습니다. 귀하의 경우와 같은 오류 로그는 무엇입니까? – ChristopherC
'파일 "/usr/lib/python3.5/multiprocessing/process.py", 249 행, _bootstrap self.run() '및'파일 '/usr/lib/python3.5/multiprocessing/process에 있습니다. py ", 93 행, 실행 중 self._target (* self._args, ** self._kwargs) ' – ripat