进程池技术实现

  • 多进程
优点:
	可以使用计算机多核,进行任务的并发执行,提高执行效率
	空间独立,数据安全
	运行不受其他进程影响,创建方便 
缺点:
	进程的创建和删除消耗的系统资源较多
  • 进程池技术
产生原因:
	如果有大量任务需要多进程完成,则可能需要频繁的创建和删除进程,给计算机带来较多的资源消耗

使用方法:
	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.map函数的演示
#演示进程池的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函数的所有执行结果的列表

你可能感兴趣的:(thread,python)