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('封邮件已发送完毕')
  • 相关阅读:
    Mvc请求管道中的19个事件
    asp.net 验证正则表达式
    Asp.net MVC进入请求管道的过程
    MVC(二)
    Aspect Oriented Programming (AOP)
    在C#中??和?分别是什么意思?
    MVC(一)
    ASP.NET 管道事件与HttpModule, HttpHandler简单理解
    Entity Framework && Lambda
    扩展类和扩展方法
  • 原文地址:https://www.cnblogs.com/blackball9/p/11982805.html
Copyright © 2011-2022 走看看