Python定时循环执行时输出时间始终不更新、仅重跑后变化的问题
问题根因
时间不更新的核心原因是时间变量的赋值时机和作用域写错了:
- 你目前写的
today = date.today()、now = datetime.now()属于全局代码,在Python脚本刚启动加载的那一刻就会执行一次,把当时的日期、时间值永久存进这两个变量,后续不会自动变化。 - 循环里反复执行的
loaddata函数,只是反复拿这两个已经存死值的全局变量做格式化输出,自然每次打印的都是程序刚启动时的时间。 - 你担心的日期不更新问题确实存在:日期和时间用的是同一套存死的全局变量,哪怕脚本跨过零点持续运行,日期输出也会一直卡在程序启动当天,不会自动跳转。
- 其他业务数据能正常每5秒刷新,是因为那些业务的取值操作都写在
loaddata函数内部,每次调用函数都会重新拉取最新值,唯独时间、日期的取值被挪到了函数外,才出现单独这两类数据不刷新的情况。
修复方案
把时间、日期的取值逻辑从全局作用域挪到loaddata函数内部,确保每次定时调用函数时,才实时获取当前的时间、日期值:
- 删掉全局位置的
today = date.today()、now = datetime.now()两行赋值语句 - 在
loaddata函数开头,实时调用date.today()和datetime.now()取最新值
修正后的完整可运行代码:
from datetime import datetime from datetime import date import time import schedule def loaddata(): # 每次执行函数时实时获取当前时间/日期 today = date.today() now = datetime.now() date1 = today.strftime("%d/%m/%Y") print("d1 =", date1) current_time = now.strftime("%H:%M:%S") print("Current Time =", current_time) schedule.every(5).seconds.do(loaddata) # 首次启动立即执行一次函数,无需等待首轮5秒间隔 loaddata() while 1: schedule.run_pending() time.sleep(1)
内容的提问来源于stack exchange,提问作者JTC
相关产品推荐
相关产品推荐

