我在Python中编写了一些代码,并希望通过在不同进程之间共享来加快速度。我在Linux上的Python 3.5中有以下程序子结构:
class Foo(fromMother):
def __init__(self, size):
fromMother.__init__()
self.data = self.__createData(size)
self.properGuess = 0
def __createData(self, size):
"""Returns some dict of n x m numpy arrays."""
def doStuff(self, level):
"""Calculates CPU-heavy, fully serial operation.
The proper guess is some sort of start value."""
a, b = foo(level, self.properGuess)
self.properGuess = a
return b
if __name__ == "__main__":
foo = Foo(someSize)
array = []
for i in range(manyValues):
array.append(foo.doStuff(i))
这与我的代码非常相似,我希望找到一种很好的方法来引入一些并行结构来使用多个内核。 doStuff()不能并行化并且是某种优化问题,因此是起始值。这是绝对最新的值并不是必要的,该功能在步骤i中仍然可以很好地执行,起点在i - 10处计算,所以现在可以更新这个值了吗?然后'。但它不能被忽略,步骤i + 1的值接近于i,我知道问题不是全局的,而只是局部凸起的。保持这种接近使我获得了相当稳定的结果。
不幸的是,破坏继承结构会非常烦人 - 这是可能的,但应该是最后的手段。我想使用Python自己的多处理库,但我对共享内存等有点困惑,因为这不是简单地共享某种类型的数组,而是将它放在一个对象中并使用它上面的方法。我只在MATLAB上完成了并行编程,这只是在一个非常基础的层面上。
有人能指出我的方法吗?我已经两天思考这个问题,而且我不确定如何在不破坏的情况下很好地实现这一目标并且" uglyfying"我的整个结构。
答案 0 :(得分:0)
您可以使用流程池
from multiprocessing import Pool
if __name__ == "__main__":
foo = Foo(someSize)
p = Pool(5)
results = p.map(foo.doStuff, range(manyValues))
但是,你需要首先考虑一些事情,你的班级是否可以共享?它会变异吗?等等......