【问题标题】:How to change multiprocessing shared array size?如何更改多处理共享数组大小?
【发布时间】:2015-10-25 13:37:23
【问题描述】:

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

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[:]

【问题讨论】:

    标签: python multiprocessing ctypes python-multiprocessing


    【解决方案1】:

    mp.Arrays 的大小只能在实例化时设置一次。您可以使用 mp.Manager 创建 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 个元素的元组)。

    【讨论】:

    • 非常感谢。它更优雅地解决了我的问题!
    猜你喜欢
    • 1970-01-01
    • 2022-11-12
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2021-03-19
    • 2019-10-09
    相关资源
    最近更新 更多