Python多进程及多参数的处理方法

x33g5p2x  于2022-03-08 转载在 Python  
字(1.5k)|赞(0)|评价(0)|浏览(343)

一、多进程pool.map()方法一

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

相关文章