进程池技术
产生原因:如果有大量任务需要多进程完成,则可能需要频繁的创建删除进程,给计算机带来较多的资源消耗
原理:创建适当的进程放入进程池,用来处理待处理事件,处理完毕之后进程不销毁,
仍然在进程池中等待处理其他事件.进程的复用降低了资源的消耗
使用方法:
1.创建进程池,在池内放入适当的进程(4-8个)
2.将事件加入到进程池等待队列
3.事件不断取进程执行事件,直到所有事件执行完毕
4.关闭进程池,回收进程
Pool(process)
功能:创建进程池对象
参数:表示进程池中有多少个进程对象
Pool.apply_async(func,args,kwargs)
功能:将事件放入到进程池队列
参数:func 事件函数
args 以元组形式给func传参
kwargs 以字典形式给func传参
返回值:返回值代表进程池对象
Pool.close()
功能:关闭进程池
Pool.join()
功能:回收进程池
Pool.map(func,iter)
功能:将要做的事件放入进程池
参数:func 要执行的函数
iter 迭代对象
返回值: 返回事件函数的返回值列表
from multiprocessing import Pool
from time import sleep, ctime
def worker(msg):
sleep(2)
print(msg)
return ctime()
if __name__ == '__main__':
# 创建进程池
pool = Pool(processes=4) # 创建4个进程池对象
result = []
for i in range(10):
msg = 'hello %d' % i
# 将事件放入进程池对列中等待执行
r = pool.apply_async(func=worker, args=(msg,))
result.append(r)
# 关闭进程池
pool.close()
# 回收进程池
pool.join()
for i in result:
print(i.get()) # 获取事件函数的返回值