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

时间:2013-12-08 10:06:53

标签: python fork

如果我在下面这样做:

for i in range(10000):
    os.fork()

发生了什么?不要考虑收获..我只是想知道os.fork()可以在linux中创建多少进程,如果它就像windows一样,只能生成大约2000个进程,接下来的8000个进程如何会吗?
感谢。

3 个答案:

答案 0 :(得分:3)

os.fork()产生一个新的操作系统级进程。对它们数量的任何限制都不依赖于Python,而是依赖于操作系统。根据{{​​3}},在Linux上,您可以通过查看以下内容了解任何软件强加的约束:

cat /proc/sys/kernel/pid_max

/etc/security/limits.conf可能进一步限制了这一点。如果那些没有先命中你,你最终会遇到可用硬件资源的问题 - 你的代码是this previous question,以及琐碎的拒绝服务攻击类型(任何软件对进程数量的限制都设置为避免这种攻击。)

答案 1 :(得分:2)

代码没有按照您的想法执行。

当您分叉时,您实际上正在复制当前流程。

这意味着在分叉之后,两个进程将从同一点继续迭代。然后两者都会fork,依此类推......创建的线程数将是指数

示例:

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

print "T"

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

回到原来的问题,因为fork创建了进程,所以线程数的限制是无关紧要的。

答案 2 :(得分:0)

os.fork()函数创建调用进程的副本。使用threading模块在​​Python中创建线程。

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

您可以在进程中创建的线程的数量通常受进程所具有的堆栈空间量以及允许进程拥有的最大(内存)内存量的限制。这些限制也由ulimit显示。

请注意,当您使用标准python实现(a.k.a CPython)时,一次只有一个线程可以执行Python字节码。