2

所以我有这个基本上对数组求和的程序。我使用了多处理,因为程序必须分析 700,000 左右的行。下面我制作了一个小脚本来说明我遇到的问题

import multiprocessing as mp
import numpy as np
import ctypes

t = range(100000)

list_1 = np.zeros((10))

for i in t:
    list_1 += np.array([1]*10)

list_t = mp.Array(ctypes.c_double, 10)
list_2 = np.ctypeslib.as_array(list_t.get_obj())
list_2 = list_2.reshape(10)

# No copy was made
assert list_2.base.base is list_t.get_obj()


def proc(x):
    global list_2
    list_2 += np.array([1]*10)

if __name__ == '__main__':
    pool = mp.Pool(processes = 6)
    pool.map(proc,t)

其中的输出:

In [2]: list_1
Out[2]: 
array([ 100000.,  100000.,  100000.,  100000.,  100000.,  100000.,
        100000.,  100000.,  100000.,  100000.])

In [3]: list_2
Out[3]: 
array([ 55828.,  65441.,  99300.,  68068.,  78774.,  78514.,  82393.,
        83446.,  82854.,  86987.])

显然我希望两个数组都像 list_1。这里发生了什么?

4

0 回答 0