如何在Python中进行并行编程

对于C ++,我们可以使用OpenMP来进行并行编程,但是,OpenMP将不能用于Python,如果我想平行Python程序的某些部分,该怎么办? 代码的结构可以被认为是:

solve1(A) solve2(B) 

solve1和solve2是两个独立的函数。 如何并行而不是按顺序运行这种代码,以减less运行时间? 希望有人能帮助我。 非常感谢。 代码是:

 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 

setinner和setouter是两个独立的函数,这就是我想要平行的地方…

您可以使用多处理模块。 对于这种情况,我可能会使用处理池:

 from multiprocessing import Pool pool = Pool() result1 = pool.apply_async(solve1, [A]) # evaluate "solve1(A)" asynchronously result2 = pool.apply_async(solve2, [B]) # evaluate "solve2(B)" asynchronously answer1 = result1.get(timeout=10) answer2 = result2.get(timeout=10) 

这将产生可以为你做通用工作的进程。 由于我们没有通过processes ,它会为您机器上的每个CPU内核产生一个进程。 每个CPU内核可以同时执行一个进程。

如果你想将一个列表映射到一个函数,你可以这样做:

 args = [A, B] results = pool.map(solve1, args) 

不要使用线程,因为GIL会locking对python对象的任何操作。

如果你指的是并发编程,你可以在Python中使用多处理 。

如果你想做一些核心的大规模并行数据分析,然后尝试python ,它现在是免费的。

CPython使用全局解释器锁,这使得并行编程比C ++更有趣

这个话题有几个有用的例子和对这个挑战的描述:

Python全局解释器锁(GIL)在Linux上使用taskset的多核系统上的解决方法?