如何更改多处理共享数组大小?

时间:2015-10-25 13:37:23

标签: python multiprocessing ctypes python-multiprocessing

我想创建一个动态大小的共享数组。我想在另一个进程中为它分配一个未知大小的数组。

from multiprocessing import Process, Value, Array


def f(a):
    b=[3,5,7]
    #resize(a,len(b)) # How to resize "a" ???
    a[:]=b  # Only works when "a" is initialized with the same size like the "b"


arr = Array('d', 0) #Array with a size of 0

p = Process(target=f, args=(arr))
p.start()
p.join()

print arr[:]

1 个答案:

答案 0 :(得分:2)

mp.Arrays的大小只能在实例化时设置一次。您可以使用mp.Manager创建shared list但是:

import multiprocessing as mp

def f(mlist):
    b = [3, 5, 7]
    mlist[:]=b  

if __name__ == '__main__':
    manager = mp.Manager()
    mlist = manager.list()
    p = mp.Process(target=f, args=[mlist])
    p.start()
    p.join()

    print(mlist[:])

产量

[3, 5, 7]

另请注意args=(arr)会导致

TypeError: f() takes exactly 1 argument (0 given)

因为args期望将序列的参数传递给它。 (args) 评估为arr。要将arr传递给f,您需要args=[arr]args=(arr,)(包含1个元素的元组)。