如何在多处理中将收益结果与池一起使用?

时间:2019-01-30 14:21:09

标签: python multiprocessing yield pool

我对如何使用yield并行分配大型对称矩阵有疑问。由于每个项目的处理速度都相对较快,所以我发现它的最佳方法是使每一行平行。

下面是我在使用imap_unordered的yield时遇到的问题的一个示例

import multiprocessing as mp
import random
import numpy as np

def func(param):
    i, js = param
    for j in js:
        yield i,j,random.random()

N=100
M = np.eye(N, dtype=np.float)
params_parallel = [ (i, range(i)) for i in range(N) ]

with mp.Pool(processes=4) as p:
    for (i,j,value) in p.imap_unordered( func, params_parallel ):
        M[i,j] = M[j,i] = value 

我得到以下结果:

Traceback (most recent call last):
  File "test_parallel.py", line 15, in <module>
    for (i,j,value) in p.imap_unordered( func, params_parallel ):
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 761, in next
    raise value
multiprocessing.pool.MaybeEncodingError: Error sending result: '<generator object func at 0x7fb6ae377780>'. Reason: 'TypeError("can't pickle generator objects",)'

ps .:我不能使用:

if __name__ == '__main__'

0 个答案:

没有答案