如何用Python进行并行编程?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (545)

对于C++,我们可以使用OpenMP进行并行编程,但是OpenMP对Python不起作用,如果我想并行我的python程序的某些部分,我该怎么办?守则的结构可视为:

solve1(A)
solve2(B)

其中solve 1和solve 2是两个独立的函数。如何并行运行这类代码,而不是按顺序运行,以减少运行时间?希望有人能帮我。代码如下:

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
提问于
用户回答回答于

您可以使用多处理模块。在这种情况下,我可能使用一个处理池:

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)
用户回答回答于

如果您的意思是并发编程,在Python里可以使用multiprocessing。

如果您想做一些核心的大规模并行数据分析,那么请尝试Anaconda,,现在是免费的。

扫码关注云+社区

领取腾讯云代金券