主动开启进程与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('封邮件已发送完毕')
原文地址:https://www.cnblogs.com/blackball9/p/11982805.html