【问题标题】:Nested for loop using multiprocessing.pool使用 multiprocessing.pool 嵌套 for 循环
【发布时间】:2019-02-27 19:22:35
【问题描述】:

当迭代器运行和每次运行的时间时,我必须对特定问题使用嵌套的 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 中。有什么指导方针吗?

【问题讨论】:

  • 对于T 的不同值和其他参数值静态,是否要在多个进程中运行simulate
  • 是的@wwii 我正在尝试做这样的实现

标签: python for-loop multiprocessing nested-loops pool


【解决方案1】:

如果我对您的理解正确,您希望使用不同的 T 值运行模拟()方法并比较结果。要使用多处理实现这一点,您只需要设置一个具有正确数量的进程的池,并使用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 可能会适得其反,因为您的所有进程都将相互交谈

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多