问题描述
使用multiprocessing的pool类多进程执行多个函数,要求:
- 可以设置最大进程
- 可以对不同函数赋予不同参数
- 可以执行不同的函数
解决方案
import multiprocessing
import os
def function_1(a, b):
print(f"进程 {os.getpid()} 执行 function_1,参数: {a}, {b}")
return a * b
def function_2(a, b):
print(f"进程 {os.getpid()} 执行 function_2,参数: {a}, {b}")
return a + b
if __name__ == "__main__":
max_processes = 4
# 将函数、参数1和参数2包装成元组,并组合成列表
tasks = [
(function_1, 1, 2),
(function_1, 3, 4),
(function_2, 5, 6),
(function_2, 7, 8),
(function_1, 9, 10),
(function_2, 11, 12)
]
# 定义一个包装器函数,将参数解包并调用相应的函数
def wrapper(args):
func, a, b = args
return func(a, b)
with multiprocessing.Pool(processes=max_processes) as pool:
# 使用 starmap 方法将任务列表传递给进程池
results = pool.map(wrapper, tasks)
# 输出进程返回的结果
print(f"进程返回的结果: {results}")
在这个示例中,定义了两个具有多个参数的函数 function_1 和 function_2。
- 在任务列表 tasks 中,将函数和它们的多个参数组合成元组。
- 然后,定义了一个包装器函数 wrapper,它接收一个元组并将其解包,调用相应的函数。
- 最后,我们使用 pool.map() 方法将任务列表传递给进程池。
这样,就可以使用 Pool 类处理具有多个参数的不同函数。