You need to enable JavaScript to run this app. Python定时循环执行时输出时间始终不更新、仅重跑后变化的问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 01:06:07