仅在同一个调度程序的apscheduler中同时运行一个作业

时间:2016-02-03 19:21:51

标签: python cron daemon apscheduler

我正在尝试确保在同一个调度程序中一次只运行一个作业。例如,我可能会有这样的事情:

def echo_arg(arg):
  print 'Going to tell you the arg! The arg is: {0}'.format(arg)
  sleep(5)

def main():
  scheduler = BlockingScheduler()
  for i in range(0, 60):
      scheduler.add_job(echo_arg, 'cron', args=[i], second=i, max_instances=1)
  scheduler.start()

即使有60个不同的作业,我也希望调度程序能够阻止,直到上一个作业完成。例如,0秒的作业应该使1,2,3和4的运行无效。有没有办法在调度程序本身中执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,在只有1个worker的线程池执行器中运行它们。这样就不能同时运行任何工作。

scheduler = BlockingScheduler(executors={'default': ThreadPoolExecutor(1)})

如果作业有重叠的计划,请确保从默认值调整失火宽限时间。