使用multiprocessing.pool嵌套for循环

问题描述 投票:0回答:1

在运行迭代器和每次运行的时间时,我必须使用嵌套for循环来解决特定问题。我试图为超参数的不同值(这里是T)执行它。我正在尝试使用multiprocessing.pool方法并行化此过程(3个进程)。但我无法弄清楚如何实现它。

def simulate(T,runs,time,param1, param2, param3, param4):
for i in tqdm(range(runs)):
    #Reset parameters
    for j in range(time):
        #Do some mathematics
#Some more mathematics
return (some output)

可以看出,该功能的参数数量很多。所以我也不确定如何在functools.partial中加入。任何准则?

python for-loop multiprocessing nested-loops pool
1个回答
1
投票

如果我理解正确,您希望使用不同的T值运行simulate()方法并比较结果。要使用多处理实现此功能,您只需要设置具有正确数量的进程的池,并使用mapT的值列表上运行您的函数。你还需要使用partial将你的函数从一个带有七个参数的函数变成一个只需要一个函数的函数,其他六个函数的值不变。这很重要,因为map需要知道哪个参数是变化的。这是一个(未经测试的)示例:

import multiprocessing as mp
from functools import partial

# Create pool with desired number of processes
pool = mp.Pool( processes=3 )
# Make a partial function with preset values for params
partial_function = partial( simulate, runs=runs, 
   time=time, param1=param1, param2=param2, 
   param3=param3, param4=param4 )
# Dummy values for what T should be
options_for_T = [100, 200, 300, 400, 500, 600]
# Results will be a list of the output of simulate() for each T
results = pool.map( partial_function, options_for_T )

编辑:我还应该指出,在这里使用tqdm可能适得其反,因为你的所有进程都会互相交谈

© www.soinside.com 2019 - 2024. All rights reserved.