python - 使用 multiprocessing.pool 嵌套 for 循环
问题描述
当迭代器运行和每次运行的时间时,我必须对特定问题使用嵌套的 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 值运行模拟()方法并比较结果。要使用多处理来实现这一点,您只需要设置一个具有正确数量的进程的池,并使用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
在这里使用可能会适得其反,因为您的所有进程都将相互交谈
推荐阅读
- python - 动态确定已在 TensorFlow 中初始化变量的张量
- android - 如何在 Android 中拥有多个 FirebaseMessagingService?
- python - “TypeError:在使用 usetex:true 时,savefig 中需要一个类似字节的对象,而不是‘str’”
- css - Visual Studio Code mac finder 文本预览不适用于 json 或 css
- html - 如何最好地突出显示(红色边框、轮廓等)表格单元格。不占用额外空间
- laravel - Laravel 5.6:DOMPDF 不保存 PDF 文件
- python - Flask 中的 If 语句使用 SQL 数据库中的字符串变量
- scala - 如何编写一个 scala 函数来接受两种类型的参数?
- javascript - 了解 Jquery-Cropper 单位
- java - 即使调试正常,休眠也不删除对象?