为什么 python 对文件句柄的数量有限制?

新手上路,请多包涵

我写了简单的测试代码,在 python 脚本中可以打开多少文件:

 for i in xrange(2000):
    fp = open('files/file_%d' % i, 'w')
    fp.write(str(i))
    fp.close()

fps = []
for x in xrange(2000):
    h = open('files/file_%d' % x, 'r')
    print h.read()
    fps.append(h)

我得到一个例外

IOError: [Errno 24] Too many open files: 'files/file_509'

原文由 jerboa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

打开文件的数量受操作系统限制。在 linux 上你可以输入

ulimit -n

看看限制是多少。如果你是 root,你可以输入

ulimit -n 2048

现在你的程序将运行正常(作为 root),因为你已经解除了 2048 个打开文件的限制

原文由 John La Rooy 发布,翻译遵循 CC BY-SA 3.0 许可协议

运行您的代码时,我在 Windows 上看到了相同的行为。该限制存在于 C 运行时。您可以使用 win32file 更改限制值:

 import win32file

print win32file._getmaxstdio()

以上将为您提供 512,这解释了 #509 处的失败(+stdin、stderr、stdout,正如其他人已经指出的那样)

执行以下命令,您的代码将运行良好:

 win32file._setmaxstdio(2048)

请注意,2048 是硬限制(底层 C Stdio 的硬限制)。结果,执行值大于 2048 的 _setmaxstdio 对我来说失败了。

原文由 Punit S 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏