如何按时间戳对请求进行分区?首分钟入第一流,后续3小时入第二流循环
周期性数据分流实现方案
核心逻辑
- 每个循环周期分为两个固定阶段:
- 阶段1:周期启动后的首1分钟,所有数据路由至第一个流
- 阶段2:阶段1结束后,接下来的3小时,所有数据路由至第二个流
- 3小时阶段结束后,自动重置周期,重复上述分流逻辑
代码示例(Python)
import time # 初始化第一个周期的起始时间戳 cycle_start = time.time() def route_data(data): global cycle_start now = time.time() time_since_cycle_start = now - cycle_start # 判断当前阶段,路由数据 if time_since_cycle_start <= 60: # 首1分钟:发送到第一个流 send_to_stream_1(data) elif 60 < time_since_cycle_start <= 60 + 3*3600: # 后续3小时:发送到第二个流 send_to_stream_2(data) else: # 周期结束,重置并进入新周期的首分钟阶段 cycle_start = now send_to_stream_1(data) def send_to_stream_1(data): # 这里替换为第一个流的实际发送逻辑 print(f"数据进入第一个流: {data}") def send_to_stream_2(data): # 这里替换为第二个流的实际发送逻辑 print(f"数据进入第二个流: {data}")
关键说明
- 用
cycle_start记录每个周期的起始点,周期结束后直接重置该时间戳,无需额外定时器 - 通过计算时间差判断当前处于周期的哪个阶段,逻辑简单且无延迟
- 边界场景处理:当超过3小时周期的瞬间,自动触发新周期,确保下一条数据直接进入新周期的首分钟阶段
内容的提问来源于stack exchange,提问作者Hany Morcos
相关产品推荐
相关产品推荐

