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

Python Schedule每日定时任务未按指定时间执行求助

Python schedule库每日定时任务失效的原因与解决办法

你遇到的问题是schedule库的每日定时任务(11点执行)没生效,但间隔几秒的任务正常运行,常见原因和解决办法如下:

可能的原因

  • 时区不匹配:schedule默认使用程序运行环境的本地时区,如果你的运行环境时区和你预期的时区不一致(比如服务器用UTC时区,你要的是北京时间11点),实际执行时间会和预期差几个小时,看起来像是没执行。
  • 程序启动时间晚于设定时间:如果你在当天11点之后才启动程序,schedule会默认等到第二天的11点才执行任务,不会在当天补跑。
  • 时间格式异常:虽然"11:00"是合法格式,但如果不小心输入了错误格式(比如带了多余的空格、AM/PM标识但环境不兼容),也会导致任务不触发。

对应的解决办法

1. 指定正确时区

如果是时区问题,可以给定时任务指定目标时区(以北京时间为例):

import schedule
import time
from zoneinfo import ZoneInfo  # Python 3.9+ 可用,旧版本替换为 pytz

def show_it():
    print('hello')

# 明确指定东八区(北京时间)
schedule.every().day.at("11:00", tz=ZoneInfo("Asia/Shanghai")).do(show_it)

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

2. 处理启动晚于设定时间的情况

如果希望程序启动后,若已过当天11点则立即执行一次,之后再按每日11点执行:

import schedule
import time
from datetime import datetime

def show_it():
    print('hello')

target_time = datetime.strptime("11:00", "%H:%M").time()
current_time = datetime.now().time()

# 若当前时间已过11点,先执行一次任务
if current_time > target_time:
    show_it()

schedule.every().day.at("11:00").do(show_it)

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

3. 确认时间格式

确保传入at()方法的时间字符串是HH:MM或HH:MM:SS的标准格式,避免多余字符(比如" 11:00"带空格、"11:00 AM"这类格式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:30:42