multiprocessing 可能产生僵尸进程,start 提供了清理机制
考虑如下一段代码
`
import multiprocessing
class Test:
def job(self):
print('pid = {}'.format(multiprocessing.current_process().pid))
def run(self, n):
for i in range(n):
multiprocessing.Process(target = self.job, args = (i, ), daemon = False).start()
if name == 'main':
test = Test()
while True:
test.run(5)
test.sleep(3)
`
python3 启动之后,可以发现,子进程执行完毕后,变成了僵尸进程。
那我们就会想,这也正常,父进程有个无限循环,父进程在,子进程结束,就是会有僵尸进程,那这样岂不是会生成一堆僵尸进程,越来越占用资源?
然而,我们发现僵尸进程的个数就是 n 个,不会增加,而且僵尸进程的 pid 会变。
其实原因是,multiprocessing.Process 对象的 start 方法在添加新的子进程的时候,会先清理已经结束的子进程,这个操作自然地清理了僵尸进程。
所以调用新的 start 之前,会有一些已经结束的子进程成为僵尸进程,并被我们发现。
浙公网安备 33010602011771号