python - 关于模式的建议:将 numpy 数组广播到不同的进程。队列,ZMQ?
问题描述
我正在构建一个桌面应用程序,用于从快速相机(大约 kHz 帧速率)获取。为了延长电影的长度,我将帧放入一个队列中,该队列由一个正在写入磁盘的单独进程消耗。
现在我需要增加一点灵活性(我不是该程序的用户),以便其他人可以在我正在做的事情之上进行开发。一般模式是相机生成的数据可以被不同的进程使用(不仅仅是保存到磁盘)。我不希望每个新人都必须更改基本代码,例如为他们的流程创建一个新队列。
因此我的问题是:有没有办法将 numpy 数组从一个进程广播到可变数量的其他进程?类似于 Qt 中信号和槽的工作方式,但这在 Python 中是多进程安全的。
我遇到了ZMQ,这似乎很理想,但找不到在边缘情况下工作的人的例子。例如,如果服务器正在广播但客户端很忙,会发生什么情况,这些帧会被丢弃吗?与队列相比,序列化 2D numpy 数组(大约 1000x50 uint16)并在套接字的另一侧重建的效率如何?
我想的模式是:
- 1个进程获取数据并广播每一帧
- N 个独立进程分别定义了两个子进程:
- 1个进程接收广播,重新创建数组并放入队列对象
- 1个进程消耗队列
这样,即使子进程落后,也不会丢失任何帧。
我正在寻找有关模式的建议,但也在寻找要使用的库。ZMQ 在我的搜索中多次弹出,但可能还有其他选项。主要部署环境是Windows PC。
解决方案
推荐阅读
- java - OnClickListener 适用于 ArrayList 中的最后一个元素
- azure - 无法连接到我在 Azure VM 上运行的网站
- python - Python Kivy FileChooser
- java - 将类的参数添加到数组
- javascript - useEffect 和 watch 状态
- java - 下载时如何设置文件类型?
- php - Wss Webserver 无法使用自签名密钥正常工作
- oracle - Oracle12c 的安装问题
- d3.js - 在同一元素上单击和拖动事件侦听器。单击事件未触发。+ D3.js 中的数据结构
- android - 如何为自定义视图的弯曲区域设置动画?