2017-03-02 203 views
0

這個問題涉及python中的多處理。我想在終止進程時執行一些代碼,在它終止之前更具體一些。我正在尋找一個解決方案,作爲python程序的atexit.register如何在python結束進程之前執行代碼?

我有一個方法工人看起來:

高清工人(): 而真: 打印( '工作') time.sleep(2) 回報

我通過運行它:

proc等於multiprocessing.Process(目標=工人,ARGS =()) proc.start()

我的目標就是TE之前執行一些額外的代碼rminating它,我做由:

proc.terminate()

+1

沒有辦法做到這一點,因爲'process.terminate()'問操作系統殺死'SIGTERM'。所以不會執行'finally'等操作符。 –

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

可生產所需要的輸出的子過程剛剛終止之前。

相關問題