gpt4 book ai didi

python - 挂起进程超时(卡住操作系统调用)

转载 作者:行者123 更新时间:2023-12-05 07:44:44 24 4
gpt4 key购买 nike

我有一个访问 NFS 挂载文件系统的 python 程序。有时,文件系统变得不可访问,一个简单的 os.stat("/path/to/file") 就会挂起进程。我已经尝试了以下超时包装器片段,但在处理“坏”操作系统调用时它似乎并不有效(坏在它不会返回的意义上):例如,它适用于:

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)

最佳答案

您可以使用看门狗进程

例如:

with timeout(seconds=3)
watchdog_queue.put( (my_id,timeout=5) )
os.stat("/nfs/mounted/filesystem")
watchdog_queue.put( (my_id,clear) )

如果 Watchdog Process5 秒 内没有收到 (my_id,clear) 消息,则使用 my_id 终止进程/线程

关于python - 挂起进程超时(卡住操作系统调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42585049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com