如何在APScheduler任务运行时更新其传入参数param?
如何在APScheduler任务运行中修改param参数
先保存任务实例
当初始添加任务时,务必把add_job返回的任务对象存起来,不然没法后续修改:
sched1 = BackgroundScheduler() # 把任务实例赋值给变量job job = sched1.add_job(run, 'interval', hours=5, args=[param]) sched1.start()
动态更新下一次任务的param
需要修改参数时,直接调用任务对象的modify方法更新args即可,下一次任务触发就会用新参数:
# 定义新的param值 new_param = "更新后的参数" # 修改任务参数 job.modify(args=[new_param])
也可以用调度器的reschedule_job方法,通过任务ID来修改,适合没保存任务实例的情况:
sched1.reschedule_job(job.id, args=[new_param])
当前正在运行的run函数参数能不能改?
这要看param的类型:
- 要是不可变类型(比如字符串、数字):不行。因为这类参数传进函数的是值的副本,外部修改
param不会影响当前正在运行的函数。 - 要是可变类型(比如字典、列表):可以直接修改对象内部内容,当前运行的
run函数会读取到更新后的值。举个例子:
# 初始化param为字典 param = {"config": "old_setting"} # 在任务运行过程中修改字典内容 param["config"] = "new_setting"
额外提醒
如果用了多进程模式的调度器,建议用数据库类的任务存储(比如SQLAlchemyJobStore),避免进程间的任务状态不一致,确保参数修改能同步到所有进程。
内容的提问来源于stack exchange,提问作者SergioABP
相关产品推荐
相关产品推荐

