如何更改多处理共享数组的大小? [英] How to change multiprocessing shared array size?

查看:48
本文介绍了如何更改多处理共享数组的大小?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个具有动态大小的共享数组.我想在另一个进程中为其分配大小未知的数组.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆