在Python中打开文件时,是否使用超时来防止死锁?
我需要打开一个NFS装载到我的服务器上的文件。有时,NFS装载失败会导致所有文件操作死锁。为了防止出现这种情况,我需要一种方法,让python中的在Python中打开文件时,是否使用超时来防止死锁?,python,file,timeout,deadlock,Python,File,Timeout,Deadlock,我需要打开一个NFS装载到我的服务器上的文件。有时,NFS装载失败会导致所有文件操作死锁。为了防止出现这种情况,我需要一种方法,让python中的open函数在设定的时间段后超时。例如,open('/nfsdrive/foo',timeout=5)。当然,默认的open过程没有timeout或类似的关键字 这里有没有人知道一种方法,如果打开一个(本地)文件的时间太长,可以有效地停止尝试打开该文件 注意:我已经尝试过urllib2模块,但它的超时选项仅适用于web请求,而不适用于本地请求。您可以尝
open
函数在设定的时间段后超时。例如,open('/nfsdrive/foo',timeout=5)
。当然,默认的open
过程没有timeout
或类似的关键字
这里有没有人知道一种方法,如果打开一个(本地)文件的时间太长,可以有效地停止尝试打开该文件
注意:我已经尝试过urllib2模块,但它的超时选项仅适用于web请求,而不适用于本地请求。您可以尝试使用
在多线程环境(如Django)中,发出超时信号可能存在一些问题<代码>线程超时
另一方面,当您运行太多“限时”函数时,可能会导致某些虚拟主机上的资源出现问题
另外,我的示例还限制了打开文件的处理时间。为了仅限制文件打开,您应该使用不同的方法手动打开/关闭文件和手动异常处理您可以尝试启动计时器,当计时器过期时,它会向您的整个进程发送一个信号——捕捉该信号并处理故障,或者在
打开
有效时停止计时器。如果Windows是您的平台,则不确定该解决方案是否能在Windows上运行--这是一种非常单一的方法…根据操作系统的不同,/etc/fstab中有一个timeo参数。我建议您查看该文件的手册页。如果在unix上运行,您可以使用低级别os的O_NONBLOCK标志。打开打开文件,然后使用选择。选择等待文件准备就绪并超时。对于这类问题有一些其他建议,包括select
示例。
from stopit import SignalingTimeout as Timeout
with Timeout(5.0) as timeout_ctx:
with open('/nfsdrive/foo', 'r') as f:
# do something with f
pass