Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中打开文件时,是否使用超时来防止死锁?_Python_File_Timeout_Deadlock - Fatal编程技术网

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

在Python中打开文件时,是否使用超时来防止死锁?,python,file,timeout,deadlock,Python,File,Timeout,Deadlock,我需要打开一个NFS装载到我的服务器上的文件。有时,NFS装载失败会导致所有文件操作死锁。为了防止出现这种情况,我需要一种方法,让python中的open函数在设定的时间段后超时。例如,open('/nfsdrive/foo',timeout=5)。当然,默认的open过程没有timeout或类似的关键字 这里有没有人知道一种方法,如果打开一个(本地)文件的时间太长,可以有效地停止尝试打开该文件 注意:我已经尝试过urllib2模块,但它的超时选项仅适用于web请求,而不适用于本地请求。您可以尝

我需要打开一个NFS装载到我的服务器上的文件。有时,NFS装载失败会导致所有文件操作死锁。为了防止出现这种情况,我需要一种方法,让python中的
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