import time
from multiprocessing.pool import Pool
def numsCheng(i):
return i * 2
if __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 Pool
def cal(item):
n, mod = item
res = 1
for i in range(2, n+1):
res = res * i % mod
return res
if __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 multiprocessing
def job(x ,y):
"""
:param x:
:param y:
:return:
"""
return x * y
def 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
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://zhzhx.blog.csdn.net/article/details/123359502
内容来源于网络,如有侵权,请联系作者删除!