这可能是一个微不足道的问题,但我如何在python中并行化以下循环?
# setup output lists
output1 = list()
output2 = list()
output3 = list()
for j in range(0, 10):
# calc individual parameter value
parameter = j * offset
# call the calculation
out1, out2, out3 = calc_stuff(parameter = parameter)
# put results into correct output list
output1.append(out1)
output2.append(out2)
output3.append(out3)
Run Code Online (Sandbox Code Playgroud)
我知道如何在Python中启动单线程,但我不知道如何"收集"结果.
多个过程也可以 - 对于这种情况最简单的事情.我正在使用当前的Linux,但代码应该在Windows和Mac上运行.
并行化此代码的最简单方法是什么?
对于C++,我们可以使用OpenMP进行并行编程; 但是,OpenMP不适用于Python.如果我想并行我的python程序的某些部分,我该怎么办?
代码的结构可以被认为是:
solve1(A)
solve2(B)
Run Code Online (Sandbox Code Playgroud)
哪里solve1和solve2是两个独立的功能.如何并行运行这种代码而不是按顺序运行以减少运行时间?希望可以有人帮帮我.首先十分感谢.代码是:
def solve(Q, G, n):
i = 0
tol = 10 ** -4
while i < 1000:
inneropt, partition, x = setinner(Q, G, n)
outeropt = setouter(Q, G, n)
if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) < tol:
break
node1 = partition[0]
node2 = partition[1]
G = updateGraph(G, node1, node2)
if i == 999:
print "Maximum iteration reaches"
print inneropt
Run Code Online (Sandbox Code Playgroud)
setinner和setouter是两个独立的函数.这就是我要平行的地方......
我有为共享内存机器(在C和FORTRAN中)编码OpenMP的经验,可以执行矩阵添加,乘法等简单任务(只是为了看看它与LAPACK的竞争).我知道OpenMP足以执行简单的任务而无需查看文档.
最近,我为我的项目转移到Python,除了绝对的基础知识,我没有任何Python经验.
我的问题是:
在Python中使用OpenMP 最简单的方法是什么?最简单的,我的意思是那个在程序员方面花费最少的工作(即使是以增加的系统时间为代价)?
我使用OpenMP的原因是因为串行代码可以转换为一个工作的并行代码,其中有几个!$OMP散布在周围.实现粗略并行化所需的时间非常小.有没有办法在Python中复制这个功能?
通过浏览SO,我可以找到:
还有更多吗?哪个与我的问题最符合?