Python网编_join方法

Posted 码码忽忽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。









以上是关于Python网编_join方法的主要内容,如果未能解决你的问题,请参考以下文章

Python网编_进程之间的数据隔离

Python网编_进程间的数据共享

Python网编_守护进程

Python网编_进程池的回调函数

Python(34)_join()方法

python网编并发数据库