我正在用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 -10计算的起点时仍相当不错,因此该值"时不时地"更新此值是完全可以的。但是它不能被排除,步骤I 1的值接近i,我知道问题不是全球,而是本地凸的。保持距离为我带来了相当稳定的结果。
不幸的是,分解继承结构将非常烦人 - 这是可能的,但应该是最后的手段。我想使用Python自己的多处理库,但我与共享内存等有点混淆,因为这不仅仅是共享某种数组,而是将其放在对象中并使用它的方法。我只在MATLAB上进行了并行编程,这只是在非常基本的层面上。
有人可以向我指出这一点。我已经考虑了两天,我不确定如何在不破坏和"丑陋"的整个结构的情况下实现这一目标。
您可以使用过程池
from multiprocessing import Pool
if __name__ == "__main__":
foo = Foo(someSize)
p = Pool(5)
results = p.map(foo.doStuff, range(manyValues))
,但是,您需要首先考虑一些事情,您的班级可以共享吗?它会突变吗?等...