多处理.haredctypes中的Array分段错误

时间:2016-11-20 19:27:53

标签: python segmentation-fault multiprocessing shared-memory

我分配了一个multiprocessing.sharedctypes.Array,以便在进程间共享。包装此程序是一个生成器,它生成从该数组计算的结果。在将数组用于任何并行计算之前,我在2次迭代后遇到Segmentation fault错误,我怀疑是由于C和Python之间的释放机制造成的。我可以使用以下简单的代码片段重现错误:

import numpy as np
from multiprocessing import Pool, sharedctypes                                                                         

def generator(niter):

    while niter > 0:
        tmp = np.ctypeslib.as_ctypes(np.random.randn(300, 100000))                                                     
        shared_arr = sharedctypes.Array(tmp._type_, tmp, lock=False)                                                   
        table = np.ctypeslib.as_array(shared_arr)                                                                      
        yield np.sum(table)
        niter -=1                                                                                                      

for s in generator(10):                                                                                                
    print s

如果我减小阵列的大小,即3x10而不是300x100000,则不会发生分段错误。这不是内存不足,因为我的PC有16GB,当时只使用6GB。 300x100,000阵列只需几百MB。

0 个答案:

没有答案