1. ホーム
  2. python

[解決済み] 関数呼び出しの実行時間を制限するには?

2023-04-20 08:48:42

質問

私のコードにソケット関連の関数呼び出しがあります。その関数は別のモジュールから来たもので、私のコントロール外ですが、問題はそれが時々何時間もブロックされることです。私は、ソリューションが別のスレッドを利用しなければならないことを推測します。

どのように解決するのですか?

これがどの程度クロスプラットフォームなのかわかりませんが、シグナルとアラームを使用するのは良い方法かもしれません。 少しの作業で、これを完全に汎用的なものにすることもでき、どのような状況でも使用できるようになります。

http://docs.python.org/library/signal.html

つまり、あなたのコードは次のようなものになります。

import signal

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

signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(10)   # Ten seconds
try:
    long_function_call()
except Exception, msg:
    print "Timed out!"