""" 1、进程的start方法执行进程。 2、join方法阻塞主进程,需要等待对应的子进程结束后再继续执行主进程。 3、多进程中必须使用join方法,避免出现僵尸进程 """ from multiprocessing import Process import time """ 1、定义函数Foo1,打印循环是第几环个进程。 2、我们在函数Foo1中增加不同的sleep时间来证明是多进程并发执行的(如果是并行会按照执行完成的先后顺序打印, 如果是串行会按照123的顺序打印) 3、创建空列表p_list,将三个子进程放入该列表,用于执行join 4、创建3个子进程执行Foo函数传递循环次数i 5、执行子进程(start) 6、执行阻塞(join) """ def foo1(n): m_list = [3, 2, 1] time.sleep(m_list[n-1]) print('这是第{}个进程'.format(n)) if __name__ == '__main__': p_list = [] for i in range(1, 4): p = Process(target=foo1, args=(i,)) p.start() p_list.append(p) for j in p_list: j.join() """疑问:为什么要先通过循环执行3个子进程,再通过循环阻塞 1、因为join会阻塞主进程,如果执行一个子进程就阻塞,就会导致三个进程不是并发执行的而是串行的。 2、看下面的例子,我们将start和join放在一个循环中,这样就会先执行一个进程的start和join,然后在循环执行下一个进程。 3、可以看到他们的输出结果,永远都是1,2,3。说明是串行的。 """ def foo2(n): m_list = [3, 2, 1] time.sleep(m_list[n-1]) print('这是第{}个进程'.format(n)) if __name__ == '__main__': for i in range(1, 4): p = Process(target=foo2, args=(i,)) p.start() p.join()
原创文章,转载请注明出处:http://124.221.219.47/article/46778/