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

如何打印sched调度器队列的人类可读时间并解决输出异常问题

问题原因

你的代码输出异常通常是两个可修复的问题导致的:

  • 时间格式化未补前导零:直接读取hour、minute属性输出时,小于10的数值不会自带前导0,会出现9:5这类不符合通用时间格式的结果
  • 未处理无文档字符串的场景:如果事件绑定的执行函数没有写docstring,event.action.__doc__会返回None,导致输出内容异常

修正后代码

import time
import datetime
import sched

# 初始化调度器
scheduler = sched.scheduler(timefunc=time.time)

# 示例事件函数
def delay_task():
    """延迟执行测试任务"""
    print("任务执行中")

# 示例:添加30秒后执行的任务
scheduler.enter(30, 1, delay_task)

def executing_at_message(event):
    # 转换为本地可读时间,需要UTC时间可替换为datetime.datetime.utcfromtimestamp
    event_dt = datetime.datetime.fromtimestamp(event.time)
    # 标准化时间格式,可按需扩展为%Y-%m-%d %H:%M:%S显示完整日期
    time_format = event_dt.strftime("%H:%M")
    # 无文档字符串时 fallback 到函数名
    action_info = event.action.__doc__ or event.action.__name__
    print(f"{time_format}: {action_info}")

# 注意:必须在调用scheduler.run()之前遍历队列,run执行时会消费队列,结束后队列为空
for event in scheduler.queue:
    executing_at_message(event)

# 启动调度器(测试时可取消注释)
# scheduler.run()

关键修改说明

  1. 用strftime方法做时间格式化,自动补全前导零,也可以灵活调整格式显示年、月、日、秒等信息
  2. 新增描述 fallback 逻辑,避免函数没有文档字符串时输出None
  3. 补充了必要的模块导入,避免运行时报变量未定义错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:24:02