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

Pi *_*ion 7 python deadlock timeout file

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

这里有人知道如果打开时间太长的话可以有效地停止尝试打开(本地)文件的方法吗?

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

imp*_*ren 4

您可以尝试使用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
Run Code Online (Sandbox Code Playgroud)

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

PS 我的示例还限制了打开文件的处理时间。要仅限制文件打开,您应该使用不同的方法来手动打开/关闭文件和手动异常处理