在 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 和手动异常处理
使用不同的方法
我需要打开一个安装在我的服务器上的 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 和手动异常处理
使用不同的方法