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

Python Schedule库未按预期调度方法问题排查

问题分析与解决

问题描述

我用以下代码实现任务调度,希望sayHello方法每天在EST时间1:53执行一次:

def sayHello(self):
    print(f"hello {datetime.datetime.now()}")

def schedule_job(self):
    print(f"schedules jobs")
    schedule.every().day.at("02:18", "US/Eastern").do(self.sayHello)

    while True:
        schedule.run_pending()
        print("Scheduled jobs:", schedule.jobs)
        time.sleep(1)

运行后发现程序一直循环打印调度任务信息,误以为sayHello在重复调用,但实际上它只执行了一次。运行输出如下:

schedules jobs
hello 2023-07-06 00:18:09.949960
Scheduled jobs: [Every 1 day at 02:18:00 do sayHello() (last run: 2023-07-06 00:18:09, next run: 2023-07-06 23:18:00)]
Scheduled jobs: [Every 1 day at 02:18:00 do sayHello() (last run: 2023-07-06 00:18:09, next run: 2023-07-06 23:18:00)]
...

问题根源

  1. 循环内的冗余打印:你把print("Scheduled jobs:", schedule.jobs)放在了while True的循环体里,每次循环都会执行这个打印,所以会持续输出任务列表——这和sayHello的执行完全无关,只是循环本身的重复操作。
  2. 时间配置与期望不符:代码里设置的执行时间是EST 02:18,但你期望的是1:53,这里时间参数写错了。
  3. 时区显示混乱:datetime.datetime.now()输出的是本地时区时间(从输出看是UTC-4,和EST的UTC-5差1小时),导致你看到的执行时间和设置的EST时间有偏差,容易产生误解。

解决办法

  • 移除循环内的打印:如果不需要实时监控任务状态,直接删掉循环里的print("Scheduled jobs:", schedule.jobs);如果需要监控,也可以改成只在任务执行时打印,或者降低打印频率。
  • 修正执行时间:把at("02:18", "US/Eastern")改成at("01:53", "US/Eastern"),匹配你的需求。
  • 统一时区输出:在sayHello里输出EST时区的时间,避免混淆,示例如下:
    def sayHello(self):
        print(f"hello {datetime.datetime.now(pytz.timezone('US/Eastern'))}")
    

修正后的完整示例代码:

import schedule
import time
import datetime
import pytz

class JobScheduler:
    def sayHello(self):
        # 输出EST时区的时间
        print(f"hello {datetime.datetime.now(pytz.timezone('US/Eastern'))}")

    def schedule_job(self):
        print("schedules jobs")
        # 设置为期望的EST时间1:53
        schedule.every().day.at("01:53", "US/Eastern").do(self.sayHello)

        while True:
            schedule.run_pending()
            # 可选:保留打印但延长休眠时间,减少输出频率
            # print("Scheduled jobs:", schedule.jobs)
            time.sleep(60)  # 改为60秒检查一次,比1秒更高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:53:21