You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:每秒捕获流数据、每5分钟打印ltt列均值的实现问题求助

解决方案:每秒捕获数据,每5分钟打印一次5分钟均值

问题分析

当前代码在strategy1每秒被调用时都会执行打印操作,且每次基于全量历史数据计算分组均值,既不符合“每5分钟打印一次”的需求,也存在效率浪费。

修改后的代码

import pandas as pd
from datetime import timedelta

# 全局变量:存储未处理的最新记录,以及上次打印的5分钟窗口起始时间
datalist = []
last_print_time = None

def strategy1(record):
    global datalist, last_print_time
    
    # 解析当前记录的时间并替换原字段,避免后续重复解析
    current_ltt = pd.to_datetime(record['ltt'], format="%a %b %d %H:%M:%S %Y")
    record['ltt'] = current_ltt
    datalist.append(record)
    
    # 初始化上次打印时间为第一条记录对应的5分钟整点
    if last_print_time is None:
        last_print_time = current_ltt.floor('5min')
    
    # 检查是否到达下一个5分钟打印节点
    if current_ltt >= last_print_time + timedelta(minutes=5):
        # 筛选当前5分钟窗口内的记录
        df = pd.DataFrame(datalist)
        window_df = df[(df['ltt'] >= last_print_time) & (df['ltt'] < last_print_time + timedelta(minutes=5))]
        
        if not window_df.empty:
            # 计算并打印该窗口的均值
            mean_result = window_df.groupby(pd.Grouper(key='ltt', freq='5min')).mean()
            print(f"=== {last_print_time.strftime('%Y-%m-%d %H:%M')} 至 {(last_print_time + timedelta(minutes=5)).strftime('%Y-%m-%d %H:%M')} 的均值 ===")
            print(mean_result)
        
        # 更新打印时间到下一个5分钟节点
        last_print_time += timedelta(minutes=5)
        
        # 清理列表,仅保留未进入下一个打印窗口的新记录
        datalist = [item for item in datalist if item['ltt'] >= last_print_time]

关键改动说明

  • 打印时机控制:通过last_print_time跟踪上次打印的5分钟窗口起始点,仅当当前记录时间到达下一个5分钟节点时才触发打印。
  • 减少重复解析:每条记录仅解析一次ltt时间,避免重复转换带来的性能损耗。
  • 精准数据计算:打印时仅处理当前5分钟窗口内的数据,而非全量历史数据,提升计算效率。
  • 内存占用优化:打印后清理过期记录,避免datalist无限增长占用内存。
  • 时间边界规整:初始化时将last_print_time对齐到最近的5分钟整点,确保打印窗口的时间边界统一(如00分、05分、10分等)。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:50:37