• 主动开启进程与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('封邮件已发送完毕')
  • 相关阅读:
    CodeForcesGym 100524A Astronomy Problem
    ZOJ 2567 Trade
    HDU 3157 Crazy Circuits
    CodeForcesGym 100212E Long Dominoes
    UVALive 6507 Passwords
    [转]
    java socket
    Spark RDD Operations(2)
    Spark cache 和 persist
    vim 基础命令
  • 原文地址:https://www.cnblogs.com/blackball9/p/11982805.html
Copyright © 2020-2023  润新知