NFSマウントされたファイルシステムにアクセスするPythonプログラムがあります。場合によっては、ファイルシステムがアクセス不能になり、簡単なos.stat( "/ path/to/file")がプロセスをハングします。私は次のタイムアウトラッパースニペットを試しましたが、「悪い」OSシステムコール(悪い意味では戻りません)を扱うときには効果的ではないようです:例えば、動作します:吊るしたプロセスからのタイムアウト
with timeout(seconds=3)
sleep(4)
が、それは動作しません:
with timeout(seconds=3)
os.stat("/nfs/mounted/filesystem")
は、私は絞首刑プロセスのうち、自分自身を蹴ることができ、他の方法はありますか?
class timeout:
"""
Usage:
with timeout(seconds=3):
sleep(4)
"""
def __init__(self, seconds=1, error_message='Timeout'):
self.seconds = seconds
self.error_message = error_message
def handle_timeout(self, signum, frame):
raise TimeoutError(self.error_message)
def __enter__(self):
signal.signal(signal.SIGALRM, self.handle_timeout)
signal.alarm(self.seconds)
def __exit__(self, type, value, traceback):
signal.alarm(0)
私はこれがうまくいくとは思わない - 例外はスローされていない。 – python152