python - 如何在 Python 中进行并行编程?

标签 python parallel-processing

对于C++,我们可以使用OpenMP进行并行编程;但是,OpenMP 不适用于 Python。如果我想并行我的 python 程序的某些部分,我该怎么办?

代码的结构可以认为是:

solve1(A)
solve2(B)

其中solve1solve2是两个独立的函数。如何并行运行这种代码而不是顺序运行以减少运行时间? 代码是:

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

其中setinnersetouter是两个独立的函数。这就是我想要并行的地方......

最佳答案

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

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锁定对 python 对象的任何操作。

关于python - 如何在 Python 中进行并行编程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072874/

相关文章:

c++ - 为什么这个 for 循环使用 OpenMP 没有更快?

java - scala/akka 性能与 java 7 fork/join

python - django 消息不显示

python - 在 Matplotlib 3D 绘图中获取视角/相机角度?

haskell - 使用 repa 时将 Identity monad 与 mmultP 一起使用有什么问题?

python - 启动具有输入参数的另一个脚本的多个实例的脚本

python - 串行调用 mpi 二进制文件作为 mpi 应用程序的子进程

python - Django:通过外键查找所有反向引用

python - Selenium ChromeDriver "get"无法可靠地加载@import 字体

python - 如何使用 scrapy-redis 管道?