【发布时间】:2014-08-07 07:05:33
【问题描述】:
请看以下代码:
for i in xrange(1,5000):
with open(r'test\test%s.txt' % i, 'w') as qq:
qq.write('aa'*3000)
好像是按照所有Python规则写的;文件在使用后关闭。好像。但实际上它似乎建议(!)系统关闭文件,而不是明确关闭它,因为当我查看资源监视器时,它显示了很多打开的文件。它给我带来了很多问题,因为在我的脚本中我使用了很多文件,并且在很长一段时间后,尽管从源代码中“关闭”了它,但我得到了“打开的文件太多”错误。
有没有办法在 Python 中显式关闭文件?或者如何检查文件是否真的(!)关闭?
更新:我刚刚尝试使用另一个监控工具 - 来自 Sysinternals 的句柄,它显示一切正确,我相信它。所以,这可能是资源监视器本身的问题。
显示打开文件的屏幕截图:
【问题讨论】:
-
我无法重现此内容。请您提供一个显示此行为的 SSCCE (sscce.org)(您现在显示的代码与屏幕截图不一致),并让我们知道您的确切 Python 版本和操作系统的详细信息。
-
你想说这是唯一的方法吗?我的意思是,我不想让所有这些文件保持打开状态,我只需要一个文件及时但 Python 在我的请求后没有关闭它,似乎它们仍然保持打开状态。我知道我可以增加打开文件数量的操作系统限制,但我认为这不是一个好的解决方案。
-
Python 2.7,Windows 7 64 位操作系统。唯一的区别是文件名。
-
运行上述测试脚本是否会出现“打开的文件过多”错误?
-
我无法重现此问题。 Windows 7 64 位,Python 2.7.5 - 使用您的确切代码。我确实注意到您正在运行同一程序的多个副本(在后台屏幕截图中);这将导致文件处理程序出现竞争条件,并且可能是造成这种情况的原因。