优点:
可以使用计算机多核,进行任务的并发执行,提高执行效率
空间独立,数据安全
运行不受其他进程影响,创建方便
缺点:
进程的创建和删除消耗的系统资源较多
产生原因:
如果有大量任务需要多进程完成,则可能需要频繁的创建和删除进程,给计算机带来较多的资源消耗
使用方法:
1.创建进程池,在池内放入适当的进程(CPU核心数)
2.将事件加入到进程池等待队列
3.不断取进程执行事件,直到所有事件执行完毕
4.关闭进程池,回收进程
from multiprocessing import Pool
1.Pool(processes)
功能:创建进程池对象
参数:表示进程池中有多少进程
2.pool.apply_async(func,args,kwds) # 异步执行
功能:将事件放入到进程池队列
参数:func 事件函数
args 以元组形式给func传参
kwds 以字典形式给func传参
返回值:返回一个代表进程池事件的对象,通过返回值的get方法可以得到事件函数的返回值
3.pool.apply(func,args,kwds) # 同步执行
功能:将事件放入到进程池队列
参数:func 事件函数
args 以元组形式给func传参
kwds 以字典形式给func传参
3.pool.close()
功能:关闭进程池
4.pool.join()
功能:回收进程池
5.pool.map(func,iter) # 类似于python的map函数
功能:将要做的事件放入进程池
参数:func 要执行的函数
iter 迭代对象
返回值:返回事件函数的返回值列表
#实现进程池功能
from multiprocessing import Pool
from time import sleep,ctime
def worker(msg):
sleep(2)
print(msg)
#创建进程池
pool = Pool(processes = 4)
for i in range(10):
msg = 'hello {}'.format(i)
#将事件放入进程池队列,等待执行
pool.apply_async(func = worker,args = (msg,))
#关闭进程池
pool.close()
#进程池回收
pool.join()
#演示进程池的pool函数
from multiprocessing import Pool
import time
def fun(n):
time.sleep(1)
print('执行pool map 事件')
return n*n
pool = Pool(4)
#使用map函数将时间放入进程池
r = pool.map(fun,range(10))
pool.close()
pool.join()
print(r) # 打印出map函数的所有执行结果的列表