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

如何实现基于分钟数组的多时间段通用定时告警功能?

解决方案

1. 封装通用倒计时函数

先把重复的倒计时逻辑抽成可复用函数,避免冗余代码:

import time
from datetime import timedelta

def countdown(seconds, label):
    while seconds > 0:
        remaining = timedelta(seconds=seconds)
        print(f"{label}: {remaining}", end="\r")
        time.sleep(1)
        seconds -= 1
    print(f"\n{label} 触发!")

2. 批量处理时间块与告警

假设总时长拆分为固定时长的时间块(比如15分钟/块),每个块内的告警时间是相对于块起始的分钟数,通过遍历实现批量触发:

# 可配置参数
total_task_minutes = 60  # 用户输入的总任务时长
block_duration_minutes = 15  # 单个时间块时长
block_alarm_minutes = [5, 3, 8, 10]  # 每个块内的告警触发点(相对于块起始的分钟数)
post_alarm_wait_seconds = 30  # 告警触发后的等待时长

# 计算时间块总数
total_blocks = total_task_minutes // block_duration_minutes

for block_idx in range(total_blocks):
    block_num = block_idx + 1
    print(f"\n=== 第 {block_num} 个时间块启动 ===")
    
    # 等待到当前时间块的起始时间(第一个块无需等待)
    block_start_delay = block_idx * block_duration_minutes * 60
    countdown(block_start_delay, f"等待进入第 {block_num} 块")
    
    # 处理当前块内的所有告警
    for alarm_idx, alarm_min in enumerate(block_alarm_minutes):
        alarm_num = alarm_idx + 1
        alarm_seconds = alarm_min * 60
        # 触发告警倒计时
        countdown(alarm_seconds, f"块{block_num}告警{alarm_num}")
        # 告警后等待返回
        countdown(post_alarm_wait_seconds, f"块{block_num}告警{alarm_num}后返回")

逻辑说明

  • 通用countdown函数统一处理倒计时的打印、延时和结束提示,只需传入时长和标识即可。
  • 时间块遍历:根据总时长和块时长计算块数量,每个块先等待到对应起始时间(第一个块起始延迟为0,直接进入)。
  • 告警遍历:每个块内的告警时间是相对块起始的,直接传入countdown即可完成触发,后续的返回等待逻辑也通过同一函数实现。

这样不管有多少时间块和告警,都能自动批量处理,无需重复编写倒计时循环。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:42:53