2017-03-02 20 views
0

この質問は、Pythonのマルチプロセッシングに関するものです。プロセスを終了するときにコードを実行し、終了する直前に特定のコードを実行したい。私はatexit.registerのpythonプログラムとして動作するソリューションを探しています。Pythonでプロセスを終了する直前にコードを実行するには?

デフワーカー(): 真しばらく: プリント( '仕事') time.sleep(2) リターン

私はでそれを実行し

は私が見える方法ワーカーを持っています:

PROC = multiprocessing.Process(対象=労働者、引数=()) proc.start()

私の目標は、単にTEの前にいくつかの余分なコードを実行することです

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() 

がちょうどサブプロセスの終了前に、所望の出力を生成することによって私はこれ、それをrminating。

関連する問題