为什么python在开始一个新的时加入僵尸进程?

时间:2015-05-10 10:15:21

标签: python python-multiprocessing

为什么当我创建一个进程并且我在僵尸状态python中有n个孩子加入它们时?

In [1]: def quick_process():
...:     pass
...: 
In [2]: import multiprocessing
In [3]: import time
In [4]: for i in range(5):
...:     multiprocessing.Process(target=quick_process).start()
...:     time.sleep(1)
...:
In [5]: import os
In [6]: while True:
...:     try:
...:         pid, status = os.waitpid(-1, 0)
...:         print(pid, status)
...:     except ChildProcessError:
...:         break
...:     
5767 0

time.sleep(1)语句用于确保当我再次循环时进程处于僵尸状态,仅此而已。正如你所看到的,while执行时只有一个孩子离开了。在此示例n = 1中,但是也会出现更大的值。为什么python会这样做?我不应该明确加入这些流程吗?任何人都可以告诉我这里发生了什么?感谢

1 个答案:

答案 0 :(得分:0)

Python没有加入流程。执行quick_process时进程退出。您仍然可以join之后的进程,如果进程已经终止,它将立即返回。例如:

import multiprocessing

def quick_process():
    pass

processes = []
for _ in range(5):
    p = multiprocessing.Process(target=quick_process)
    p.start()
    processes.append(p)

for p in processes:
    p.join()  # returns when the process terminates