更改Windows中打开文件的最大数量

3
我想知道如何在Windows下更改打开文件的最大数量,类似于Unix下的ulimit命令。在我的c:\windows\system32中,我找不到CONFIG.NT文件,因此无法通过更改CONFIG.NT文件中的文件号来解决问题。
问题是我编写了一个Python脚本,在其中需要调用subprocess.Popen(cmd, stdout=sp.PIPE, stdin=sp.PIPE, shell=True) 256或512次。也就是说,我需要启动256或512个后台进程。只要启动的进程数小于255,这个脚本就能正常工作。

据我所知,没有固定的最大值。无论出了什么问题,这可能不是原因。 - Harry Johnston
你遇到了什么问题?听起来好像你还没有找到正确的解决方案。 - David Heffernan
听起来像是 Python 的限制。在 Windows 中,没有什么会对子进程数量施加一个一字节的限制 - 尽管你应该注意到,Windows 可能无法同时运行那么多进程。 - Harry Johnston
2个回答

2
一般认为Windows没有文件数量的上限,只取决于内存管理能力。
你可能会发现这篇文章有用:Russinvich对Windows句柄资源限制的讨论
我们编写并行程序来处理数千个文件。尽管有这种说法,但在同时打开并保持打开多个文件时,我们似乎会遇到资源限制。
我们发现将打开文件的数量限制在几百个是有用的。这似乎不会对性能产生太大影响。使用并行应用程序中的计数信号量可以很容易地管理这一点。

问题在于我编写了一个Python脚本,在其中需要调用subprocess.Popen(cmd, stdout=sp.PIPE, stdin=sp.PIPE, shell=True)256或512次。这意味着我需要启动256或512个后台进程。只要启动的进程数小于255,脚本就可以正常工作。 - bunny
那么,鉴于这个问题,你为什么要问你所问的问题呢? - David Heffernan

1
这是一个旧问题,但我会做出贡献。有一个限制,但它不是每个子进程的限制。Python为每个子进程上的每个管道打开文件描述符。您的代码因为Window默认限制512个打开文件描述符而在255处中断(非常接近于2个管道x 255个子进程)。
请参见此问题的第3个答案:Why python has limit for count of file handles?。该答案显示了如何增加Window的默认限制。您可以将打开限制更改到Windows限制的最大值2048。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接