======================================
多进程
优点:并行多个任务,提高运行效率
空间独立,数据安全,创建方便
缺点:进程创建销毁的过程中销毁较多的计算机资源
=============================================
在需要频繁的创建和删除较多进程的情况下,导致计算机资源消耗过多,由此引发出进程池技术
进程池如何处理;
1、创建进程池,在池内放入适量的进程(一般看cup内核数量)
2、将事件加入进程池等待队列
3、使用进程池中的进程不断处理事件
4、所有事件处理后,回收关闭进程池
from multiprocessing import Pool
Pool()
功能:创建进程池
参数:processes 指定进程池中的进程数量
返回:得到进程池对象
pool.apply_async() pool这里指的是进程池对象
功能:异步方式将事件放入进程池执行
参数: func:要执行的事件函数
args:同Process中args 给函数传参
kwds:同process中Kwargs给函数传参
返回值:返回一个对象,该对象可以通过get()方法得到func函数的返回值
pool.close()
功能:关闭进程池,使其无法加入新的事件
pool.join()
功能:阻塞等待进程池退出(当所有事件处理完毕)
pool.apply()
用法和apply_async一样,只不过是事件是一件一件按顺序完成。(一般不使用)
===========================
pool.map(func,iter)
===========================
from multiprocessing import Pool from time import sleep import os def worker(msg): sleep(2) print(msg) #创建进程池,启动4个进程 pool=Pool(processes=4) #放入事件 for i in range(10): msg="Hello %d"%i pool.apply_async(worker,(msg,)) sleep(3) print('='*10) #关闭进程池,不能加入事件 pool.close() #阻塞等待回收 pool.join()
yangrui@ubuntu:~/num6$ python3 pool.py Hello 0 Hello 3 Hello 1 Hello 2 ========== Hello 4 Hello 6 Hello 7 Hello 5 Hello 9 Hello 8 yangrui@ubuntu:~/num6$ python3 pool.py Hello 0 Hello 1 Hello 2 Hello 3 ========== Hello 5 Hello 4 Hello 6 Hello 7 Hello 8 Hello 9