使用python os.fork()可以创建多少个进程

使用python os.fork()可以创建多少个进程,python,fork,Python,Fork,如果我在下面这样做: for i in range(10000): os.fork() 发生什么事了?不要考虑收割。我只想知道os.fork()在linux中可以生成多少进程,如果它和windows一样,只能生成大约2000个进程,接下来的8000个进程将如何 谢谢。这段代码并不是你想象的那样 当您进行分叉时,实际上是在复制当前流程 这意味着分叉后,两个过程将从同一点继续迭代。然后两者都会分叉,等等。。。创建的线程数将是指数级的 例如: import os for i in range

如果我在下面这样做:

for i in range(10000):
    os.fork()
发生什么事了?不要考虑收割。我只想知道os.fork()在linux中可以生成多少进程,如果它和windows一样,只能生成大约2000个进程,接下来的8000个进程将如何
谢谢。

这段代码并不是你想象的那样

当您进行分叉时,实际上是在复制当前流程

这意味着分叉后,两个过程将从同一点继续迭代。然后两者都会分叉,等等。。。创建的线程数将是指数级的

例如:

import os
for i in range(3):
    os.fork();

print "T"
执行时,您应该看到2^3=8个进程

回到您原来的问题,因为
fork
创建进程,所以线程数量的限制是不相关的。

os.fork()
生成了一个新的os级进程。对它们数量的任何限制都不取决于Python,而是取决于操作系统。根据,在Linux上,您可以通过查看以下内容了解任何软件对其施加的限制:

cat /proc/sys/kernel/pid_max
但这可能会受到
/etc/security/limits.conf
的进一步限制。如果这些攻击没有首先击中你,你最终会遇到可用硬件资源的问题-你的代码是一种简单的拒绝服务攻击(对进程数量的任何软件限制都是为了避免这种攻击)。

该函数创建调用进程的副本。线程是使用模块在Python中创建的

在类UNIX系统(如Linux)上可以创建的进程数量通常受到计算机内存量和操作系统中设置的某些限制的限制。命令的输出
ulimit-a
显示所有限制

您可以在进程内创建的线程数量通常受到进程拥有的堆栈空间量和允许该进程拥有的最大(虚拟)内存量的限制。这些限制也通过
ulimit
显示


请注意,当您使用标准python实现(又称CPython)时,一次只能有一个线程执行python字节码。

os.fork
创建一个新进程。说得迂腐一点,新进程包含一个新线程,因此确实创建了一个新线程,但这可能不是你的意思。为什么要这样做?与POSIX fork的数字相同。你的问题不是关于python,而是关于POSIX/Linux。@msw我可能有一万台虚拟机,我想对每台机器进行ssh,然后做一些事情,所以我使用os.fork来做。还有
ulimit-u
@lvc我现在明白了,例如,我的cpu、mem或任何其他限制只能支持2000个线程,其余的怎么办?有什么不好的事情会发生?@lvc看起来我需要一个更好的主意。我找到了一种方法,我将我的10000台虚拟机分成许多组。在我的代码中,在循环过程中,如果os.fork,它将继续,否则,它将做一些事情。因此,它应该工作得很好。但是你指出的效果,确实很有趣,我以前没有注意到