使用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方法
-
-
主进程负责回收子进程的资源
-
如果子进程执行结束,父进程没有回收资源,那么这个子进程会变成一个僵尸进程
-
主进程的结束逻辑
-
主进程的代码结束
-
所有的子进程结束
-
给子进程回收资源
-
主进程结束
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('封邮件已发送完毕')