Python网编_join方法

前言:
我们知道父进程要负责回收子进程占用的系统资源(就是父要给子收尸)
so父进程要等子进程结束之后收了尸才能结束,如果父进程先结束,子进程的资源就没法被回收,就会一直占用系统资源,就成了僵尸进程了
我们的Python中如果父进程即使运行完了或者报错了也要等待子进程结束收了尸再结束

举个例子:我们要给500个人群发邮件
假设我们每发送一封邮件需要0.1s 总耗时0.1*500 = 50s
那么我们开启了10个进程,每个进程负责50个邮件
所有进程发送完邮件,我们需要得到一个通知:所有的进程都已经发送完毕(文字中的数字不重要,不要纠结)
def send_mail(n):
    print('发送邮件%s'%n)

if __name__ == __main__:
    p = Process(target=send_mail())
    p.start()
    p.join()  # 这个join叫做阻塞,直到子进程执行结束才执行后面的代码
    print('所有邮件都已经发出了')
那么我们有10个进程呢如何保证这10个进程都结束呢?
if __name__ == __main__:
    lis = []  # 弄个列表装进程
    for i in range(10):
        p = Process(target=send_mail)
        lis.append(p)  # 创建一个子进程 就把这个子进程放到列表中
        p.start()
    for i in lis:
        p.join()  # 把所有的子进程都进行一个阻塞判断
    print('所有邮件的都已经发出了’)

总结:join方法可以理解成阻塞,直到被join的进程结束才执行这一句。所以可以join判断进程是否结束

   如果有多个进程需要判断,可以弄一个列表,每生成一个进程,将进程放进去。然后循环这个列表进行join。

原文地址:https://www.cnblogs.com/gzying-01/p/10371525.html