我正在用 APScheduler (v3.0.0) 编写一个数据库驱动的应用程序。尤其是在开发过程中,我发现自己经常想要命令计划的作业现在开始运行,而不会影响其后续计划。
当然,可以在创建工作时执行此操作:
def dummy_job(arg):
pass
sched.add_job(dummy_job, trigger='interval', hours=3, args=(None,))
sched.add_job(dummy_job, trigger=None, args=(None,))
但是,如果我已经安排了一个带有间隔或日期触发器的作业......
>>> sched.print_jobs()
Jobstore default:
job1 (trigger: interval[3:00:00], next run at: 2014-08-19 18:56:48 PDT)
...似乎没有一个好方法可以告诉调度程序“制作一份立即开始的工作的副本”。我试过sched.reschedule_job(trigger=None)
了,它安排工作立即开始,但删除了它现有的触发器。
也没有明显、简单的方法来复制作业对象,同时保留其args
和任何其他有状态属性。我想象的界面是这样的:
sched.dup_job(id='job1', new_id='job2')
sched.reschedule_job('job2', trigger=None)
显然,APScheduler 已经包含复制作业对象的内部机制,因为重复调用get_job
不返回相同的对象(即(sched.get_job(id) is sched.get_job(id))==False
)。
有没有其他人在这里提出解决方案?如果没有,我正在考虑在开发人员的网站上发布建议。