我有一个生成器函数(Python)可以这样工作
def Mygenerator(x, y, z, ...):
while True:
# code that makes two matrices based on sequences of input arrays
yield (matrix1, matrix2)
我要做的是把这个发生器的输出相加。这条线的作用是:
^{pr2}$
我想把它并行化以加快计算速度。由于list(Mygenerator(...))
将占用太多内存,因此Mygenerator的输出在生成时必须减少。在
Tags:
为了回答我自己的问题,我找到了一个似乎像我希望的那样有效的解决方案:
首先,
Mygenerator
不再是生成器而是函数。另外,现在我不再循环x、y和z的段,而是将一段传递给函数:将
^{pr2}$multiprocessing.Pool
与imap
(generator)函数一起使用似乎可行:其中,我将lambda表达式中的},以避免与同名的其他变量混淆。当尝试使用带有
x
和y
更改为r1
和{multiprocessing
的生成器时,pickle遇到了一些问题。在唯一让人失望的是,它并没有真正加快计算速度。我想这和日常操作有关。采用8芯时,处理速度提高了约10%。当减少到4核时,速度加倍。这似乎是我对我的特定任务所能做的最好的,除非有其他方法来并行化。。。在
这里必须使用
imap
函数,因为map
将在reduce
操作之前将所有返回值存储在内存中,在这种情况下,这是不可能的。在相关问题 更多 >
编程相关推荐