[英]How to change multiprocessing shared array size?
I want to create a shared array with a dynamic size. 我想创建一个具有动态大小的共享数组。 I want to assign an array with an unknown size to it in another process.
我想在另一个过程中为其分配一个大小未知的数组。
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[:]
The size of mp.Arrays
can only be set once upon instantiation. 实例化时只能设置一次
mp.Arrays
的大小。 You could use a mp.Manager
to create a shared list however: 您可以使用
mp.Manager
创建共享列表,但是:
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[:])
yields 产量
[3, 5, 7]
Note also args=(arr)
results in 还要注意
args=(arr)
导致
TypeError: f() takes exactly 1 argument (0 given)
because args
expects a sequence of arguments to be passed to it. 因为
args
希望将一个参数序列传递给它。 (args)
evaluates to arr
. (args)
计算为arr
。 To pass arr
to f
you would need args=[arr]
or args=(arr,)
(a tuple containing 1 element). 要将
arr
传递给f
您需要args=[arr]
或args=(arr,)
(包含1个元素的元组)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.