Closed. This question needs to be more focused。它当前不接受答案。












想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。

已关闭6年。



Improve this question




我正在一个项目中,我想在其中使用Python进行数据采集,数据处理和GUI可视化(将pyqt与pyqtgraph结合使用)。每个部分原则上都已实现,但是不同的部分没有很好地分开,这使得很难进行基准测试和提高性能。所以问题是:

是否有很好的方法来处理软件不同部分之间的大量数据?

我想到了以下情况:
  • 采集:从某些设备获取数据并将其存储在可以从其他位置访问的数据容器中。 (这部分应该可以在没有处理和可视化部分的情况下运行。这部分是时间紧迫的,因为我不想丢失数据点!)
  • 处理:从数据容器中获取数据,进行处理,然后将结果存储在另一个数据容器中。 (此外,该部分也应能够在没有GUI的情况下运行,并且在获取后会有延迟(例如,我上周记录的过程数据)。)
  • GUI/可视化:从容器中获取并处理数据并对其进行可视化。
  • 保存数据:我希望能够将数据的某些部分存储/流式传输到磁盘。

  • 当我说“大量数据”时,我的意思是说我得到的阵列每秒大约有200万个数据点(16位),需要处理并可能还要存储。

    有没有可用于正确处理大量数据的Python框架?也许是以我可以连接的数据服务器的形式。

    最佳答案

    多少数据?

    换句话说,您是否获取了太多数据,以致无法在需要时将所有数据都保留在内存中?

    例如,有些度量会生成大量数据,处理它们的唯一方法是事后分析:

  • 获取要存储的数据(通常为RAID0)
  • 对数据
  • 进行后处理
  • 分析结果
  • 选择并存档子集

  • 小数据

    如果您的计算机系统能够跟上数据生成的步伐,则可以在每个阶段之间使用单独的Python queue

    大数据

    如果您的测量所创建的数据超出了系统的消耗范围,则应从定义数据重要性的几层(也许只有两层)开始:
  • 无损-如果缺少一个点,那么您最好从
  • 重新开始
  • 有损-如果缺少点或一组数据,没什么大不了的,只需等待下一次更新



  • 根据您的描述,采集处理必须无损,而 GUI/可视化可能有损。

    对于无损数据,您应该使用queues。对于有损数据,可以使用deques

    设计

    无论您使用哪种数据容器,都可以通过以下三种方式连接阶段:
  • Producer-Consumer:P-C模拟FIFO-一个参与者生成数据,而另一个参与者消费数据。您可以建立一个生产者/消费者链来实现您的目标。
  • Observer:虽然P-C通常是一对一的,但观察者模式也可以是一对多的。如果您需要多个参与者在一个来源发生变化时使用react,那么观察者模式可以为您提供这种功能。
  • Mediator:调解员通常是多对多的。如果每个 Actor 都可以引起其他 Actor 使用react,那么他们所有人都可以通过调解人进行协调。

  • 似乎每个阶段之间只需要1-1的关系,因此生产者-消费者设计看起来很适合您的应用程序。

    关于python - 如何在Python中正确分离数据采集,处理和可视化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27800260/

    10-11 03:56
    查看更多