zoukankan      html  css  js  c++  java
  • 主动开启进程与join方法

    使用multiprocessing.Process来开启进程

    import os
    import time
    from multiprocessing import Process
    def eat():
        print('start eating',os.getpid())
        time.sleep(1)
        print('end eating',os.getpid)
    def sleep():
        print('start sleeping',os.getpid())
        time.sleep(1)
        print('end sleeping',os.getpid())
    if __name__ =='__main__':
        p1 = Process(target=eat)#创建一个即将要执行eat函数的进程对象
        p1.start()#开启进程
        p2 = Process(target=sleep)#开启一个即将要执行sleep函数的进程对象
        p2.start()#开启进程
        print('main:',os.getpid())
    #我们打印后会发现每个进程都会有自己的进程id,我们主动开启了两个进程和一个main函数进程

     join方法

    • 把一个进程的结束事件封装成一个join方法

    • 执行join方法的效果就是阻塞直到这个子进程执行结束就结束阻塞

    • 在多个进程中使用join方法

    • 主进程没有结束:等待子进程结束

    • 主进程负责回收子进程的资源

    • 如果子进程执行结束,父进程没有回收资源,那么这个子进程会变成一个僵尸进程

    • 主进程的结束逻辑

      • 主进程的代码结束

      • 所有的子进程结束

      • 给子进程回收资源

      • 主进程结束

    import time
    import random
    from multiprocessing import Process
    def send_mail(a):
        time.sleep(random.random())
        print('发送了一封邮件',a)
    if __name__ == '__main__':
        l = []
        for i in range(10):
            p = Process(target=send_mail,args=(i,))
            p.start()
            l.append(p)
        print(l)
        for p in l:p.join()#会产生阻塞,直到结束才会执行以后的代码
        print(l)
        # 阻塞 直到上面的十个进程都结束
        print('封邮件已发送完毕')
  • 相关阅读:
    lamp----6 实现虚拟主机ssl安全
    lamp-----5 apache虚拟主机实现,发布多个独立站点
    lamp----4 虚拟目录
    lamp----3 访问控制
    Apache配置反向代理、负载均衡和集群(mod_proxy方式)
    lamp-------3 userdir发布用户站点
    lamp------2 发布站点
    [转]KDE/QT与GNOME/GTK比较
    为什么会有文字聊天
    [转]gdb结合coredump定位崩溃进程
  • 原文地址:https://www.cnblogs.com/blackball9/p/11982805.html
Copyright © 2011-2022 走看看