2017-03-02 3 views
0

이 질문은 파이썬에서 다중 처리와 관련이 있습니다. 프로세스를 종료 할 때 코드가 종료되기 직전에 특정 코드를 실행하고 싶습니다. 나는 파이썬 프로그램에 대해 atexit.register으로 작동하는 솔루션을 찾고있다.python에서 프로세스를 종료하기 직전에 코드를 실행하는 방법은 무엇입니까?

데프 노동자() : 진정한 동안 : 인쇄 ('작업') time.sleep (2) 반환

I에 의해 실행을

나는 보이는 방법 노동자가 :

PROC = multiprocessing.Process (대상 = 근로자, 인수의 =()) proc.start()

내 목표는 단지 ​​테 전에 몇 가지 여분의 코드를 실행하는 것입니다 나는에 의해 수행하는, 그것을 rminating :

proc.terminate()

+1

'process.terminate()'가 운영체제에게'SIGTERM'으로 죽이라는 요청을하기 때문에 그렇게 할 방법이 없습니다. 따라서 '최종적으로'핸들러 등은 실행되지 않습니다. –

+1

당신은'SIGTERM' 시그널 핸들러를 제공 할 수 있습니다. https://docs.python.org/3.4/library/signal.html의 'signal.signal'을 참조하십시오. –

답변

2

를 사용하여 신호 처리 및 절편 SIGTERM :

import multiprocessing 
import time 
import sys 
from signal import signal, SIGTERM 

def before_exit(*args): 
    print('Hello') 
    sys.exit(0) # don't forget to exit! 


def worker(): 
    signal(SIGTERM, before_exit) 
    time.sleep(10) 

proc = multiprocessing.Process(target=worker, args=()) 
proc.start() 
time.sleep(3) 
proc.terminate() 

그냥 하위 프로세스 종료하기 전에 원하는 출력을 생성합니다.