今天我遇到了一个问题,导致安装过时,这导致我的整个python应用程序无限期挂起。
发生了什么事情,导致过时了,然后我在那条路上打了os.path.exists(path)
。电话无限期挂起。
我真的需要阻止这一点。我唯一的想法是将os.path.exists
调用放在后台线程上并突然终止线程(显然不是首选),如果它在超时秒后仍然存活。理想情况下,我会通过调用来检查挂载是否过时而避免这种情况。
有什么想法吗?仅供参考,尝试访问此路径的所有呼叫都会挂起,包括os.path.ismount(path)
。虽然这是一个罕见的事件,但我不能让整个系统冻结用户:/。
答案 0 :(得分:0)
你可以使用python子进程模块和shell" timeout"用于检测hange mount的命令:
call = subprocess.Popen(["timeout 10 ls /your_mount_dir/ &> /dev/null; echo $?"], stdout=subprocess.PIPE, shell=True)
output = call.communicate()
result = output[0].strip()
if result != '0':
# Mount is hung.
答案 1 :(得分:0)
类似于myheartsgoon的答案,但更安全,更简单。
try:
subprocess.check_call(["timeout", "4", "ls", "/mnt/your_nas"])
except subprocess.CalledProcessError:
# is hanging