You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于时间戳合并多传感器实时时序数据的实现方案问询

按时间戳合并传感器实时时序数据的解决方案

这场景我之前做物联网数据采集时碰到过,核心就是用缓存字典来暂存未配对的数据,等同一个时间戳的两个传感器数据都到齐了再输出合并结果。下面是具体的实现思路和代码:

实现思路

  • 用一个字典data_cache来暂存数据,键是时间戳(比如'0''1'),值是另一个字典,用来分别存储sensor_1sensor_2的数值列表。
  • 每收到一条数据,先解析出传感器ID、时间戳和后续的数值字段。
  • 将解析后的数据存入缓存对应位置,然后检查该时间戳下两个传感器的数据是否都已收到。
  • 如果两个传感器的数据都齐全,就按照你需要的格式合并输出,同时可以从缓存中移除该时间戳的记录(避免长期运行内存溢出)。

完整代码实现

import subprocess

# 初始化缓存字典,键是时间戳,值是存储两个传感器数据的子字典
data_cache = {}

process = subprocess.Popen(['node', 'server.js'], stdout=subprocess.PIPE)
while True:
    byte_data = process.stdout.readline()
    if not byte_data:
        break  # 子进程结束时退出循环
    string_data = byte_data.rstrip().decode("utf-8")
    list_data = string_data.split(",")
    
    # 解析数据:第一个元素是传感器ID,第二个是时间戳,后面是数值
    sensor_id = list_data[0]
    timestamp = list_data[1]
    sensor_values = list_data[2:]
    
    # 初始化该时间戳的缓存项(如果不存在)
    if timestamp not in data_cache:
        data_cache[timestamp] = {'sensor_1': None, 'sensor_2': None}
    
    # 将当前传感器的数据存入缓存
    data_cache[timestamp][sensor_id] = sensor_values
    
    # 检查两个传感器的数据是否都已收到
    cached = data_cache[timestamp]
    if cached['sensor_1'] is not None and cached['sensor_2'] is not None:
        # 按要求格式合并:时间戳 + sensor1数值 + sensor2数值
        merged = [timestamp] + cached['sensor_1'] + cached['sensor_2']
        print(merged)  # 这里可以换成你需要的输出/存储逻辑
        
        # 从缓存中移除已处理的时间戳,节省内存
        del data_cache[timestamp]

代码解释

  1. 缓存结构data_cache的设计能清晰跟踪每个时间戳下两个传感器的数据状态,避免混乱。
  2. 数据解析:通过拆分list_data,快速提取传感器ID、时间戳和数值,逻辑简单直接。
  3. 合并触发条件:只有当两个传感器的同时间戳数据都到齐时才输出,保证了合并结果的完整性。
  4. 内存优化:处理完的时间戳数据立即从缓存删除,适合长期运行的实时数据采集场景。

可选优化点

如果担心某个传感器的时间戳数据丢失(比如永远收不到),可以添加一个超时清理机制,比如用threading.Timer定期检查缓存中超过一定时间未完成的记录,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Frederik Petri

火山引擎 最新活动