Python 应用程序之间共享高频数据有哪些不同方法?

问题描述 投票:0回答:1

我编写了一个应用程序,它读取串行数据,执行一些操作,然后将其写入 csv 文件。我使用管理程序为每个串行线路运行一个单独的应用程序实例。来自不同串行流的一些数据需要组合和/或转换以创建新的自定义数据类型,然后将其写入 csv 文件或通过 UDP 广播。

我并不真正关心旧数据,只关心最近收到的数据。事实上,如果数据在一段时间后超时,这样当新数据停止传入时旧数据就不会被使用,那就太好了。

大约有 40 个或更多数据流传入,其中一些为 1Hz,另一些为 30Hz 或更高。

上位机是Linux系统。

进程间共享数据有哪些方法?

Redis 之类的东西可以解决这个问题吗? sqlite 数据库怎么样?有哪些权衡?

python database sqlite redis
1个回答
0
投票

看起来可能的设计是一个简单的发布/订阅系统,例如NATS。你不需要持久性,所以简单的 NATS 很好。另一种可能性是 MQTT。

  • 读取串行线的每个进程都将是给定“NATS 主题”的生产者(可能无需写入 CSV 文件)。
  • 每个组合多个串行线路流的进程都将是多个“NATS 主题”的消费者。

考虑到消费者需要逻辑来应对不同流的不同速率,无论使用何种技术。

SQLite 虽然是一个非常好的产品,但似乎并不适合这个应用程序, 因为它支持多个读取器,但一次仅支持一个写入器(请参阅WAL)。

您仍然可以考虑使用 SQLite 作为数据格式而不是 CSV。它不是 明确这些 CSV 文件是否是长期存在的。也是可以的 向 SQLite 导入/导出 CSV 文件。

我无法评论Redis,因为Redis有很多东西而你没有具体说明 你指的是什么(K/V 存储?队列?)。

© www.soinside.com 2019 - 2024. All rights reserved.