一、多进程pool.map()方法一
import time
from multiprocessing.pool import Pooldef numsCheng(i):return i * 2if __name__ == '__main__':time1 = time.time()nums_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]pool = Pool(processes=5)result = pool.map(numsCheng, nums_list)pool.close() # 关闭进程池,不再接受新的进程pool.join() # 主进程阻塞等待子进程的退出print(result)time2 = time.time()print("计算用时:", time2-time1)
结果:
[2, 4, 6, 8, 10, 12, 14, 16, 18]
计算用时: 0.21639275550842285
解释说明:
1、看到Pool有一个processes参数,这个参数可以不设置,如果不设置函数会跟根据计算机的实际情况来决定要运行多少个进程,我们也可自己设置,但是要考虑自己计算机的性能。
2、map()函数。需要传递两个参数,第一个参数就是需要引用的函数,第二个参数是一个可迭代对象,它会把需要迭代的元素一个个的传入第一个参数我们的函数中。因为我们的map会自动将数据作为参数传进去
3、pool()开启了,不要忘记pool.close() 和 pool.join() 关闭进程池,以及让主进程阻塞等待子进程的退出。
二、多进程pool.map()方法二
代码:
from multiprocessing import Pooldef cal(item):n, mod = itemres = 1for i in range(2, n+1):res = res * i % modreturn resif __name__ == "__main__":args = []for i in range(1, 10):args.append((i,1000000007))with Pool(10) as pool:results = pool.map(cal, args)print(results)
运行结果:
[1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
三、多参数情况处理:
代码:
import time
import multiprocessingdef job(x ,y):""":param x::param y::return:"""return x * ydef job1(z):""":param z::return:"""return job(z[0], z[1])if __name__ == "__main__":time1=time.time()pool = multiprocessing.Pool(2)data_list=[(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10)]res = pool.map(job1,data_list)time2=time.time()print(res)pool.close()pool.join()print('总共耗时:' + str(time2 - time1) + 's')
运行结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
总共耗时:0.24999451637268066s