守则的结构可被视为:
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是两个独立的函数。那是我想平行的地方。。。
您可以使用multiprocessing模块。在这种情况下,我可以使用一个处理池:
这将产生可以为您执行一般工作的进程。由于我们没有通过
processes
,它将为您计算机上的每个CPU核心生成一个进程。每个CPU核可以同时执行一个进程。如果要将列表映射到单个函数,请执行以下操作:
不要使用线程,因为GIL锁定了python对象上的任何操作。
CPython使用全局解释器锁,使并行编程比C++ +/P>更有趣
本主题有几个有用的示例和挑战描述:
Python Global Interpreter Lock (GIL) workaround on multi-core systems using taskset on Linux?
这可以用Ray非常优雅地完成。
要并行化示例,需要使用
@ray.remote
装饰器定义函数,然后使用.remote
调用它们。与multiprocessing模块相比,它有许多优点。
这些函数调用可以组合在一起,例如
注意Ray是一个我一直在帮助开发的框架。
相关问题 更多 >
编程相关推荐