在Numpy/Scipy中实现管道或流数组的方法

2024-06-06 04:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我用来更好地解释问题的特定用例,但是我正在寻找一个通用的解决方案。在

我使用的是带有adafruit LED显示屏的覆盆子Pi,它显示一个RGB矩阵(这段代码是python2编写的)。我有一个python脚本,它每1/n秒生成一次RGB数据。在

是否有一个包或库允许我以np.ndarray公司在一个进程中,让它由矩阵脚本轮询,这样它就可以进行numpy数组的近乎实时的进程间通信。在


Tags: 数据代码adafruit脚本led覆盆子进程np
1条回答
网友
1楼 · 发布于 2024-06-06 04:17:20

一个简单而快速的解决方案是使用numpy.memmaplibrary。它只是创建一个存储在磁盘上二进制文件中的数组的内存映射。通过这种方式,您可以在进程之间共享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[:]

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

^{pr2}$

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

我所做的测试共享一个(480360,21)数组,同时有4个进程从该数组读写所需时间不到1毫秒。在

相关问题 更多 >