• 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。

  • 相关阅读:
    metasploit 常用命令汇总
    MSF命令 收集
    【转载】虫师『性能测试』文章大汇总
    渗透测试、取证、安全和黑客的热门链接
    Hackers top in China
    国外整理的一套在线渗透测试资源合集[转载]
    Filezilla中文字符文件看不到或显示乱码的解决办法
    Filezilla 多目录的访问设置
    ISAPI在IIS7上的配置
    数据库主体在该数据库中拥有 架构,无法删除解决方法(转)
  • 原文地址:https://www.cnblogs.com/gzying-01/p/10371525.html
Copyright © 2020-2023  润新知