如何更改多处理共享数组的大小? [英] 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[:]
推荐答案
mp.Arrays
的大小只能在实例化时设置一次.您可以使用 mp.Manager
来创建
The size of mp.Arrays
can only be set once upon instantiation. You could use a mp.Manager
to create a shared list however:
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)
也会导致
Note also args=(arr)
results in
TypeError: f() takes exactly 1 argument (0 given)
因为args
希望将参数的序列传递给它. (args)
计算结果为arr
.要将arr
传递给f
,您需要args=[arr]
或
args=(arr,)
(包含1个元素的元组).
because args
expects a sequence of arguments to be passed to it. (args)
evaluates to arr
. To pass arr
to f
you would need args=[arr]
or
args=(arr,)
(a tuple containing 1 element).
这篇关于如何更改多处理共享数组的大小?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文