Python_多进程_创建进程池
多进程_创建进程池
一、进程池概括
1、进程池说明
2、进程池方法
二、获取cpu操作核数
import multiprocessing multiprocessing.cpu_count()
运行结果
三、多进程_进程池&单进程的效率比对
#coding: utf-8 import multiprocessing import time def m1(x): time.sleep(0.05) return x * x if __name__ == '__main__': #多进程_进程池的执行时间 pool = multiprocessing.Pool(multiprocessing.cpu_count())#pool进程池,()获取cpu的核数 i_list = range(1000) time1=time.time() pool.map(m1, i_list)# time2=time.time() print('time elapse:',time2-time1) #单进程的执行时间 time1=time.time() list(map(m1, i_list)) time2=time.time() print('time elapse:',time2-time1)
运行结果
四、创建进程池
#encoding=utf-8
from multiprocessing import Pool
def f(x):
return x * x
if __name__ == '__main__':
pool = Pool(processes = 4) # start 4 worker processes
result = pool.apply_async(f,[10]) # evaluate "f(10)" asynchronously
print(result)
print(result.get(timeout = 1))
print(pool.map(f,range(10))) # prints "[0, 1, 4,..., 81]"
运行结果
延伸:(实现给map中的函数传递多个参数)
#encoding=utf-8 from multiprocessing import Pool def f(object): return object.x * object.y class A: def __init__(self,a,b): self.x =a self.y =b if __name__ == '__main__': pool = Pool(processes = 4) # start 4 worker processes params = [A(i,i) for i in range(10)] print(pool.map(f,params)) # prints "[0, 1, 4,..., 81]"
运行结果:
五、多进程与单进程执行时间的比较
#encoding=utf-8
import time
from multiprocessing import Pool
def run(fn):
#fn: 函数参数是数据列表的一个元素
time.sleep(1)
return fn * fn
if __name__ == "__main__":
testFL = [1,2,3,4,5,6]
print ('Single process execution sequence:') #顺序执行(也就是串行执行,单进程)
s = time.time()
for fn in testFL:
run(fn)
e1 = time.time()
print(u"顺序执行时间:",int(e1-s))
print('concurrent:') #创建多个进程,并行执行
pool = Pool(5) #创建拥有5个进程数量的进程池
#testFL:要处理的数据列表,run:处理testFL列表中数据的函数
rl = pool.map(run,testFL)
pool.close()#关闭进程池,不再接受新的任务,join之前必须加上close(),否则会报错
pool.join()#主进程阻塞等待子进程的退出
e2 = time.time()
print(u"并行执行时间:",int(e2 - e1))
print(rl)
运行结果