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

为什么我配置的schedule定时任务未到触发时间就自动连续运行?

问题原因及解决方案
  • 你当前启用的调度规则为schedule.every(1).minutes.do(main),该规则本身逻辑就是每隔1分钟触发一次main函数运行,自然会出现重复执行的情况。如果你需要仅在每天固定的16:30触发,注释掉每分钟执行的规则,取消上方固定时间调度规则的注释即可。
  • 代码存在变量未定义的错误:main函数中调用MergeZips(df2,df1)时,df1并没有被定义,你之前查询Snowflake得到的结果变量名为DFsnow,变量名不匹配会导致main函数运行时报错。schedule库对于执行失败的任务不会标记为已完成,会在每次run_pending检查时重试执行,这是脚本看起来持续不停运行的核心原因。
  • 确认你在代码开头已经导入了所需的依赖库,缺失导入也会导致执行报错触发反复重试:
import schedule
import time
  • 如果你是在Jupyter类的notebook环境中运行,底部的while True循环会一直占用内核线程,属于调度器的正常工作状态,只要没有反复打印main函数中的日志,就不属于异常持续执行。

修正后参考代码

import schedule
import time

# 此处省略你自己定义的ConnectSnow、SnowZips、ConnectSalesforce、SFZips、MergeZips函数
# 注意提前声明passwordSNOW、sqlzipterry、passwordSF、sf_data等全局变量

# 若任务执行时间较长,可加运行锁避免同一时间跑多个main实例
is_running = False
def main():
    global is_running
    if is_running:
        return
    is_running = True
    try:
        print("Lets connect to Snowflake...")
        SnowDB = ConnectSnow('email.com', passwordSNOW)
        print("Reading Snowflake statement")
        DFsnow = SnowZips(sqlzipterry)
        print("Lets connect to Salesforce...")
        SFDB = ConnectSalesforce('email.com', passwordSF)
        print("Reading Salesforce statement")
        df2 = SFZips(sf_data)
        # 修正变量名错误
        Final  = MergeZips(df2, DFsnow)
    finally:
        is_running = False
    
schedule.every().day.at("16:30").do(main) 
# 注释掉每分钟执行的规则
# schedule.every(1).minutes.do(main)

# 该循环为schedule标准逻辑,用于持续检查触发时间,不会导致任务异常重复执行
while True:
    schedule.run_pending()
    time.sleep(1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:08