多处理在发电机输出上的应用

2024-10-02 22:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个生成器函数(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: of函数trueinputthatondefcode
1条回答
网友
1楼 · 发布于 2024-10-02 22:28:52

为了回答我自己的问题,我找到了一个似乎像我希望的那样有效的解决方案:

首先,Mygenerator不再是生成器而是函数。另外,现在我不再循环x、y和z的段,而是将一段传递给函数:

def Myfunction(x_segment, y_segment, z_segment):
        # code that makes two matrices based on input arrays
        return (matrix1, matrix2)

multiprocessing.Poolimap(generator)函数一起使用似乎可行:

^{pr2}$

其中,我将lambda表达式中的xy更改为r1和{},以避免与同名的其他变量混淆。当尝试使用带有multiprocessing的生成器时,pickle遇到了一些问题。在

唯一让人失望的是,它并没有真正加快计算速度。我想这和日常操作有关。采用8芯时,处理速度提高了约10%。当减少到4核时,速度加倍。这似乎是我对我的特定任务所能做的最好的,除非有其他方法来并行化。。。在

这里必须使用imap函数,因为map将在reduce操作之前将所有返回值存储在内存中,在这种情况下,这是不可能的。在

相关问题 更多 >