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

Python使用schedule包定时调用函数时更新全局变量作为输入的问题

问题核心原因

你注册定时任务时传入的inputnumber=num是值传递,会直接把注册时刻num的数值4固化为任务的固定入参,后续全局变量num的更新不会修改已经存入任务配置的参数值,所以每次调用do_function拿到的入参都是初始的4。


解决方案1:直接读取全局变量(最简洁)

因为你已经在函数内声明了使用全局变量num,完全可以不需要通过入参传递数值,直接在函数内部读取最新的全局num即可,修改后代码如下:

import schedule
import time


num = 4
print('Original number:', num)

def do_function():
    global num
    # 直接读取最新的全局num作为输入
    inputnumber = num
    num = inputnumber + 1
    print('input number:', inputnumber)
    print('new number:', num)
    return num

# 注册任务不需要传固定参数
schedule.every(5).seconds.do(do_function)

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

解决方案2:传入可变对象避免值固化(保留入参传递写法)

如果不想直接在函数内部硬编码读取全局变量,可以将数值存放在列表等可变对象中,传参时传递的是可变对象的引用,后续修改对象内部的值时,每次任务调用都能读取到最新值,代码示例:

import schedule
import time


num = [4]
print('Original number:', num[0])

def do_function(input_num_container):
    inputnumber = input_num_container[0]
    new_num = inputnumber + 1
    print('input number:', inputnumber)
    print('new number:', new_num)
    input_num_container[0] = new_num
    return new_num

# 传入列表这个可变对象,传递的是引用
schedule.every(5).seconds.do(do_function, input_num_container=num)

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:36:01