如果我在下面这样做:
for i in range(10000):
os.fork()
发生了什么?不要考虑收获..我只是想知道os.fork()可以在linux中创建多少进程,如果它就像windows一样,只能生成大约2000个进程,接下来的8000个进程如何会吗?
感谢。
答案 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)