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

每小时运行脚本存在时间偏移,如何实现稳定可靠的定时任务?

实现稳定的每小时定时任务方案

你当前的问题是:用schedule.every(3600).seconds设置定时任务时,每次执行时间会因任务本身耗时+循环sleep的累积,导致时间戳不断延后,无法稳定在固定时间点执行。

问题原因

schedule.every(3600).seconds是以上一次任务结束时间为起点,再间隔3600秒执行下一次。如果你的export()函数执行需要10秒,那第一次10:00:00执行完,下一次就会在11:00:10触发,长期累积偏差会越来越大。

解决方案

方法1:使用schedule的固定整点触发(最简单)

直接让任务在每小时的0分0秒执行,不管上一次任务何时结束,下一次都会卡在整点。修改你的调度代码:

import pandas as pd
from datetime import datetime as dt
import schedule
import time

def export():
    df = pd.read_excel("filepath", sheet_name='Import Data')
    now = dt.now()
    dt_string = now.strftime("%Y%m%d %H%M%S")
    df["Minute"] = now.minute
    df["Hour"] = now.hour
    df["Day"] = now.day
    df["Month"] = now.month
    df["Year"] = now.year
    df.to_excel("filepath" + dt_string + ".xlsx", sheet_name='Export Data')

# 改为每小时整点执行
schedule.every().hour.at(":00").do(export)

while True:
    schedule.run_pending()
    time.sleep(1)

方法2:手动计算下一次执行时间(更精确)

如果需要更高精度,或者担心schedule库的潜在偏差,可以直接计算下一个整点的时间,然后sleep到该时间点,彻底避免累积误差:

import pandas as pd
from datetime import datetime as dt, timedelta
import time

def export():
    df = pd.read_excel("filepath", sheet_name='Import Data')
    now = dt.now()
    dt_string = now.strftime("%Y%m%d %H%M%S")
    df["Minute"] = now.minute
    df["Hour"] = now.hour
    df["Day"] = now.day
    df["Month"] = now.month
    df["Year"] = now.year
    df.to_excel("filepath" + dt_string + ".xlsx", sheet_name='Export Data')

while True:
    export()
    # 获取当前时间
    now = dt.now()
    # 计算下一个整点时间
    next_run = now.replace(minute=0, second=0, microsecond=0) + timedelta(hours=1)
    # 处理任务执行超时的情况(比如任务跑了1.5小时,已经过了下一个整点)
    if next_run <= now:
        next_run += timedelta(hours=1)
    # 计算需要睡眠的时长
    sleep_duration = (next_run - now).total_seconds()
    # 睡眠到下一个整点
    time.sleep(sleep_duration)

注意事项

  • 如果你的export()函数执行时间可能超过1小时,方法2中的超时判断很重要,避免出现负数睡眠时长。
  • 方法1足够应对大多数场景,代码更简洁;方法2适合对时间精度要求极高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:25:18