在 Python 中打开文件时使用超时来防止死锁?

Use a timeout to prevent deadlock when opening a file in Python?

我需要打开一个安装在我的服务器上的 NFS 文件。有时,NFS 安装失败会导致所有文件操作死锁。为了防止这种情况,我需要一种方法让 python 中的 open 函数在设定的时间段后超时。例如。类似于 open('/nfsdrive/foo', timeout=5)。当然,默认的 open 过程没有 timeout 或类似的关键字。

这里有人知道在打开(本地)文件的时间过长时有效停止尝试打开文件的方法吗?

注意:我已经尝试过 urllib2 模块,但它的超时选项仅适用于网络请求,不适用于本地请求。

您可以尝试使用 stopit

from stopit import SignalTimeout as Timeout

with Timeout(5.0) as timeout_ctx:
    with open('/nfsdrive/foo', 'r') as f:
        # do something with f
        pass

SignalTimeout 在多线程环境(如 Django)中可能存在一些问题。 ThreadingTimeout 另一方面,当您 运行 太多“限时”功能时,可能会导致某些虚拟主机上的资源出现问题

P.S。我的示例还限制了打开文件的处理时间。要仅限制文件打开,您应该对手动文件 opening/closing 和手动异常处理

使用不同的方法