【发布时间】:2015-01-06 14:02:02
【问题描述】:
我正在做一个项目,我想在 Python 中执行数据采集、数据处理和 GUI 可视化(使用 pyqt 和 pyqtgraph)。每个部分都在原则上实现,但不同部分没有很好地分离,这使得难以对标和提高性能。所以问题是:
有没有一种很好的方法来处理软件不同部分之间的大量数据?
我想到了类似以下场景:
- 获取:从一些设备获取数据并将它们存储在一些可以从其他地方访问的数据容器中。 (这部分应该可以在没有处理和可视化部分的情况下运行。这部分时间很紧迫,因为我不想丢失数据点!)
- 处理:从数据容器中获取数据,对其进行处理,并将结果存储在另一个数据容器中。 (此外,这部分应该能够在没有 GUI 的情况下运行,并且在采集后有延迟(例如,我上周记录的过程数据)。)
- GUI/可视化:从容器获取获取和处理的数据并将其可视化。
- 保存数据:我希望能够将数据的某些部分存储/流式传输到磁盘。
当我说“大量数据”时,我的意思是我得到了每秒大约有 200 万个数据点(16 位)需要处理和存储的数组。
是否有任何 Python 框架可以用来正确处理如此大量的数据?也许以我可以连接到的数据服务器的形式。
【问题讨论】:
-
我不是专家,但我想你可以看看:模型视图控制器设计模式(即使它只是 Qt 中的模型视图),也许还有
pandas(@987654321 @)? MVC 是关于数据的分离及其在 GUI 中的表示,而 pandas 是关于处理大量数据。我希望这对你来说是一个开始! -
我记得在 LabView 中,一种常见的方法是在Producer/Consumer pattern 中通过队列连接并行循环。 “采集”循环可能比“图形”循环具有更高的优先级,以避免丢失数据。但是我刚刚开始使用 Python 进行采集,不知道最好的方法——例如,你不能设置线程的优先级,AFAIK。我也对答案感兴趣。