python - 将大量参数传递给多处理映射的最 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 的方式不会严重影响执行此操作的速度?
干杯
解决方案
推荐阅读
- decision-tree - 根据预期效用选择操作
- javascript - 从统一 webGL 向嵌入它的 vue 页面发送消息
- javascript - 如何编写我自己的车把助手并在 patternlab-node 中使用它?
- c - 二叉搜索树,Valgrind 条件跳转或移动取决于未初始化的值
- visual-studio-code - 如何在视觉工作室代码(mac)中向上/向下移动多行?
- python - 如何选择 NumPy 数组中的所有非黑色像素?
- go - bufio.NewReader.ReadString() 中没有缓冲区大小限制?
- python - 创建窗口后在后台运行代码
- docker - sql developer中的imariadb,自动提交保持“真实”
- laravel - 具有多个房间的酒店预订系统的 Laravel 查询范围编辑方法