0

这是我的具体用例,可以更好地解释问题,但我正在寻找一个通用的解决方案。

我正在使用带有显示 RGB 矩阵的 adafruit LED 显示屏的 Raspberry Pi(此代码在 Python 2 中)。我有一个每 1/n 秒生成 RGB 数据的 python 脚本。

是否有一个包或库允许我在一个进程中以 np.ndarray 的形式连续生成 RGB 数据,并让矩阵脚本对其进行轮询,以便它对 numpy 数组进行近乎实时的进程间通信。

4

1 回答 1

1

一个简单快速的解决方案是使用numpy.memmap 。它只是为存储在磁盘上的二进制文件中的数组创建内存映射。通过这种方式,您可以非常轻松且非常快速地在进程之间共享 numpy 数组。

例如,生成 RGB 数据的主要过程可以是:

import numpy as np
myshape = (100,100,3) # my RGB array
shared_array = np.memmap("/tmp/testarray", mode='w+', shape=myshape)

while True:
    data = some_function_to_get_rgb_data() # returns a numpy array of myshape
    shared_array[:] = data[:]

读取该数组的另一个进程可以是:

import numpy as np
read_shape = (100,100,3)
shared_array = np.memmap("/tmp/testarray", mode='r', shape=read_shape)

while True:
    # shared_array will behave as a numpy ndarray
    do_something_with_array(shared_array) 

只考虑形状必须匹配(dtype数组的也可以传递给memmap函数)并且创建文件的进程必须首先运行。在实践中,对主进程所做的任何更改shared_array都会很快反映在其他进程中。

我已经完成了与 4 个进程同时共享一个 (480,360,21) 数组的测试,从该数组读取和写入所需的时间不到 1 毫秒。

于 2018-04-27T21:55:27.743 回答