zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    “ODBC驱动程序不支持动态记录集”错误的解决
    Pro *C/C++学习笔记(一)
    探讨全局变量的析构顺序
    指针和数组关系初探
    (转)Visual C++开发工具与调试技巧整理
    对利用Session纪录datagrid模板列中CheckBox的状态的一点改进
    大学老师列传
    重读保尔的意义
    Rich Edit控件的使用
    C++程序员常用工具集
  • 原文地址:https://www.cnblogs.com/gzying-01/p/10371525.html
Copyright © 2011-2022 走看看