我有一个python程序访问一个NFS挂接的文件系统。有时候,文件系统变得无法访问,一个简单的os.stat(“/ path/to/file”)会挂起进程。我已经尝试了以下超时包装片段,但在处理“不良”OS系统调用时(它不会返回的意义上的错误),它似乎不起作用:例如,它适用于:从一个挂起的进程超时(卡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