如何更改多处理共享数组大小?
How to change multiprocessing shared array size?
我想创建一个动态大小的共享数组。我想在另一个进程中为它分配一个大小未知的数组。
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[:]
mp.Arrays
的大小只能在实例化时设置一次。但是,您可以使用 mp.Manager
to create a 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 个元素的元组)。
我想创建一个动态大小的共享数组。我想在另一个进程中为它分配一个大小未知的数组。
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[:]
mp.Arrays
的大小只能在实例化时设置一次。但是,您可以使用 mp.Manager
to create a 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 个元素的元组)。