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
相关产品推荐
相关产品推荐

