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

如何在使用schedule库的Python函数中修改全局变量?

问题分析与修复方案:动态调整定时任务执行间隔

Alright, let's break down why your code isn't working as expected, and fix it step by step.

核心问题所在

你的代码每次执行job()函数时,都会通过schedule.every(seconds).minutes.do(job)新增一个完全独立的定时任务,而不是修改原有任务的执行间隔。随着job的多次运行,系统里会堆积越来越多的定时任务,每个任务都按各自的间隔重复执行,完全达不到“更新原有任务间隔”的预期效果。

另外还有个小细节:你设置的初始间隔是0.01,搭配.minutes的话实际是0.01分钟(也就是0.6秒),但主循环里time.sleep(1)会导致程序错过任务触发时机,可能让任务看起来完全没按预期运行。

修复后的代码

要实现动态调整间隔的需求,我们需要跟踪当前的定时任务,每次执行完job后取消旧任务,再用更新后的间隔创建新任务:

import time
import schedule

seconds = 0.01
# 用来存储当前的定时任务对象,方便后续取消
current_job = None

def job():
    global seconds, current_job
    print("I'm working...")
    seconds += 0.01
    
    # 取消当前的定时任务(如果存在)
    if current_job:
        schedule.cancel_job(current_job)
    
    # 用更新后的间隔创建新任务,并保存任务引用
    current_job = schedule.every(seconds).minutes.do(job)

# 初始化第一个定时任务
current_job = schedule.every(seconds).minutes.do(job)

while True:
    schedule.run_pending()
    time.sleep(0.1)  # 缩短sleep时间,避免错过短间隔的任务触发

关键改动说明

  • 新增current_job变量:用来跟踪当前活跃的定时任务对象,确保我们能准确取消旧任务。
  • 取消旧任务再创建新任务:每次job执行完成后,先移除上一轮的任务,再用递增后的seconds创建新任务,实现间隔动态更新。
  • 调整time.sleep时长:原代码的1秒sleep会错过0.6秒间隔的任务,改成0.1秒能保证程序及时响应待执行的任务。

如果你的实际需求是按秒级间隔调整(而非分钟级),只需要把代码里的.minutes替换成.seconds即可,逻辑会更符合直观的“秒级调整”预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:37:49