如何打印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()
关键修改说明
- 用
strftime方法做时间格式化,自动补全前导零,也可以灵活调整格式显示年、月、日、秒等信息 - 新增描述 fallback 逻辑,避免函数没有文档字符串时输出
None - 补充了必要的模块导入,避免运行时报变量未定义错误
内容的提问来源于stack exchange,提问作者Damian Grzanka
相关产品推荐
相关产品推荐

