简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM