2017-06-30 59 views
1

這可能是一個簡單的情況,我預計很多人會遇到它。 我有一個簡單的python程序,可以在某個無限循環中執行某些操作並進入睡眠狀態。我想用信號使這個程序在SIGHUP上正常退出。現在,當一個信號在睡眠狀態下發送到callee.py時,程序立即退出,而我期望它完成睡眠並退出。睡眠蟒蛇迴路中的信號處理2.7

有沒有任何解決方法來繞過此行爲?我也接受任何其他方法,通過我可以實現這一點。

注意:這與python3預期的一樣,但我無法移植現有的python 2.7到3的模塊。

這是我的代碼:

callee.py

stop_val = False 
def should_stop(signal, frame): 
    print('received signal to exit') 
    global stop_val 
    stop_val = True 

def main(): 
    while not stop_val: 
     signal.signal(signal.SIGTERM, should_stop) 
     # do something here 
     print('Before sleep') 
     time.sleep(300) 
     print('after sleep') 

caller.py

pid = xxx; 
os.system('kill -15 %s' % pid) 
+0

正如一個側面說明,'os.system'已被棄用。傾向於使用'subprocess.Popen'。 – DeepSpace

+0

已注意。謝謝 – madhuri

回答

0

我今天遇到了同樣的問題。這裏是一個簡單的包裝,它模仿python3的行爲:

def uninterruptable_sleep(seconds): 
    end = time.time()+seconds 
    while True: 
     now = time.time() # we do this once to prevent race conditions 
     if now >= end: 
      break 
     time.sleep(end-now)