Python挂起时挂着陈旧的挂载。建议?

时间:2013-05-03 23:19:14

标签: python mount

今天我遇到了一个问题,导致安装过时,这导致我的整个python应用程序无限期挂起。

发生了什么事情,导致过时了,然后我在那条路上打了os.path.exists(path)。电话无限期挂起。

我真的需要阻止这一点。我唯一的想法是将os.path.exists调用放在后台线程上并突然终止线程(显然不是首选),如果它在超时秒后仍然存活。理想情况下,我会通过调用来检查挂载是否过时而避免这种情况。

有什么想法吗?仅供参考,尝试访问此路径的所有呼叫都会挂起,包括os.path.ismount(path)。虽然这是一个罕见的事件,但我不能让整个系统冻结用户:/。

2 个答案:

答案 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