python - title中文 - plt.title用法




如何在Python中进行并行编程 (3)

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

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

在Linux上使用taskset的多核系统上的Python Global Interpreter Lock(GIL)解决方法?

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

solve1(A)
solve2(B)

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

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


如果你指的是并发编程,你可以在Python中使用multiprocessing

如果你想做一些核心的大规模并行数据分析,然后尝试免费的Anaconda


这可以通过Ray非常优雅地完成。

要并行化您的示例,您需要使用@ray.remote装饰器定义函数,然后使用.remote调用它们。

import ray

ray.init()

# Define the functions.

@ray.remote
def solve1(a):
    return 1

@ray.remote
def solve2(b):
    return 2

# Start two tasks in the background.
x_id = solve1.remote(0)
y_id = solve2.remote(1)

# Block until the tasks are done and get the results.
x, y = ray.get([x_id, y_id])

这与multiprocessing模块相比有许多优点。

  1. 相同的代码将运行在多核机器以及一组机器上。
  2. 进程通过共享内存和零拷贝序列化高效地共享数据。
  3. 错误消息传播良好。
  4. 这些函数调用可以组合在一起,例如,

    @ray.remote
    def f(x):
        return x + 1
    
    x_id = f.remote(1)
    y_id = f.remote(x_id)
    z_id = f.remote(y_id)
    ray.get(z_id)  # returns 4
    
  5. 除了远程调用函数之外,类还可以作为actors远程实例化。

请注意, Ray是我一直在帮助开发的框架。







parallel-processing