对于迭代器运行时的特定问题和每次运行的时间,我必须使用嵌套的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中。有准则吗?
答案 0 :(得分:1)
如果我对您的理解正确,那么您想使用不同的T值运行Simulation()方法并比较结果。要使用多处理来实现此功能,您只需要设置具有正确数量的进程的Pool,然后使用map
在T
值列表上运行函数。您还需要使用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
可能会适得其反,因为您的所有进程都将互相交谈