2016-10-09 5 views
2

5秒後にhello, worldを出力するコードサンプルがあるとします。 Timerスレッドが5秒以上かかってスレッドを終了したかどうかを確認する方法が必要です。応答がない場合にスレッドのタイムアウトを設定してスレッドを終了するにはどうすればよいですか?

from threading import Timer 
from time import sleep 


def hello(): 
    sleep(50) 
    print "hello, world" 

t = Timer(5, hello) 
# after 5 seconds, "hello, world" will be printed 
t.start() 

上記のコードブロックhelloでは、処理に5秒以上かかる場合があります。

hello機能を考慮すると、応答が返されない外部サーバーへの呼び出し、タイムアウトなどの例外もありません。私はsleep関数の問題をシミュレートしたかったのです。

答えて

1

signalを使用し、そのalarmメソッドを呼び出すことができます。タイムアウト時間が経過すると例外(処理可能)が発生します。以下の(不完全な)例を参照してください。

あなたは、Pythonのsignalここhttps://docs.python.org/2/library/signal.htmlについての詳細を読むことができます。

+0

ありがとうございます。魅力的です。ちょっとした注意: 'time_duration'を浮動させることはできません。 – ALH

+1

ありがとうございます。私は 'timeout_duration = 5'に変更しました。私はそれが助けて非常にうれしいです。 – emmanuelsa

+0

私は確信していませんが、シグナルハンドラがSIGALARMを持っているので、これはLinux上でのみ動作するようです。 Windowsで実行すると、 "AttributeError"というエラーが表示されます: 'module'オブジェクトに 'SIGALARM'属性がありません – Kev1n91

関連する問題