为什么当我创建一个进程并且我在僵尸状态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会这样做?我不应该明确加入这些流程吗?任何人都可以告诉我这里发生了什么?感谢
答案 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