当n_job大于1时,Joblib并行多核显示错误

时间:2018-07-26 15:10:26

标签: python parallel-processing joblib

我有一个二维的numpy形状数组(45000,14000)。

按照以下链接中的示例:joblib.Parallel,我正在尝试并行执行此过程以减少计算时间。

这是我的代码在较小数组(30,30)上的演示:

import numpy as np
from joblib import Parallel, delayed
from tqdm import tqdm

class vec:
    embed_c2 = []
    def stack_vectors(self, c2, i):
        y = np.array(c2[i]).reshape([1, -1])
        if len(vec.embed_c2) == 0:
            vec.embed_c2 = y
        else:
            vec.embed_c2 = np.vstack((vec.embed_c2, y)).copy()

    def test(self):
        c2 = np.ones((30, 30))

        loop = tqdm(range(len(c2)))
        loop.set_description('processing')
        Parallel(n_jobs=1)(delayed(self.stack_vectors)(c2, i) for i in loop)
        print(vec.embed_c2.shape)

c = vec()
c.test()

我在这段代码中没有问题,但是当我将n_jobs更改为2或更大时,会出现以下错误:

  

第23行,正在测试

     

print(vec.embed_c2.shape)

     

AttributeError:“列表”对象没有属性“形状”

以n_jobs为2为例,“ embed_c2”未转换为numpy数组且其大小为零,而n_jobs为1时,它正确填充并转换为numpy数组。

0 个答案:

没有答案