2016-07-13 8 views
0

異なる入力に何度も関数を適用する必要があります。場合によっては、実行に数時間かかることがあります。私はそれが10秒以上続くことを望んでいません。私は前の投稿(How to limit execution time of a function call in Python)の方法を見つけました。私はそれを使用することができますが、すぐに私のカーネルが死ぬ(予期せず)。例をあげておきます。Pythonで関数呼び出しの実行時間を制限すると、カーネルが破棄されます

誰かがこの問題に直面するか、それが起こる理由を知っていますか?

Fyk:私はクモ(パイソン2.7.11 64-ビット、Qtの4.8.7、PyQt4ダーウィン(API v2の)4.11.4)あなたはSIGALRMハンドラと10個の信号を作成している

import signal 
import time 


def signal_handler(signum, frame): 
    raise Exception("Timed out!") 

for i in range(10): 
    signal.signal(signal.SIGALRM, signal_handler) 
    signal.alarm(10) # Ten seconds 
    try: 
     time.sleep(0.2) # The function I want to apply 
     print("Ok it works") 
    except Exception, msg: 
     print "Timed out!" 

答えて

1

、意味を使用します同時に10件の例外が発生しています。

signal.signal(signal.SIGALRM, signal_handler) 
signal.alarm(10) # Ten seconds 

for i in range(10): 
    try: 
     time.sleep(0.2) # The function I want to apply 
     print("Ok it works") 
    except Exception, msg: 
     print "Timed out!" 
     break 

をそれとも、完全である必要があり、信号の後にアラームを閉じる検討する必要があります:あなたは代わりに試してみたいことがありますあなたの答えのための

for i in range(10): 
    signal.signal(signal.SIGALRM, signal_handler) 
    signal.alarm(10) # Ten seconds 
    try: 
     time.sleep(i * 2) # Force it to break, 
     print("Ok it works") 
    except Exception, msg: 
     print "Timed out!" 
    signal.alarm(0) 
+0

TKS。私は私のシグナルを閉じる必要があることを知らなかった.ALAL!私はループ内のアラームが欲しい。しかし、私はそれを閉じると、それは動作します! –

関連する問題