2016-02-03 6 views
0

Я пытаюсь обеспечить выполнение только одного задания за раз в одном планировщике. Так, например, у меня может быть что-то вроде этого:Выполняйте только одно задание одновременно в 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 недопустимыми. Есть ли способ сделать это в самом планировщике?

Спасибо!

ответ

2

Да, запустите их в исполнителе пула потоков, у которого есть только 1 рабочий. Таким образом, никакие задания не могут выполняться одновременно.

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

Если задания имеют перекрывающиеся графики, убедитесь, что вы отрегулировали время отсрочки пропуска зажигания от значения по умолчанию.