首页 > 解决方案 > 将大量参数传递给多处理映射的最 Pythonic 方式是什么?

问题描述

我正在尝试使用 Python 的多处理库并行运行随机模拟 50 次,并将并行执行时间与顺序执行时间进行比较。

我编写了一个调用我的随机模拟函数的函数,parallelfunc它作为第一个参数传递给 multiprocessing map 命令。

def parallelfunc(v):
    gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)

目前 map 的第二个参数如下:

if __name__ == '__main__':
    #para_proc = list(range(50))
    start = datetime.utcnow()
    with Pool() as p:
        pool_results = p.map(parallelfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]) 
    end = datetime.utcnow()
    sim_time = end - start
    print(f"Simualtion utc time:\n{sim_time}")

我尝试了一些方法来将长度为 50 的迭代作为 map 的第二个参数传递,包括这种形式的列表para_proc不起作用。

然后我尝试了一个列表理解[x for x in range(50)],只是我认为 for 循环确实减慢了执行时间,而且它并不比按顺序运行 50 次模拟快多少,这不是我想要的。

有没有更 Pythonic 的方式不会严重影响执行此操作的速度?

干杯

标签: pythonlistparallel-processingmultiprocessing

解决方案


推荐阅读