2015-10-25 70 views
1

我想創建一個動態大小的共享數組。我想在另一個進程中爲它分配一個未知大小的數組。如何更改多處理共享數組大小?

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[:] 

回答

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。要通過arrf,您需要args=[arr]args=(arr,)(包含1個元素的元組)。

+0

非常感謝。它解決了我的問題,更加優雅! – Caniko