2016-04-18 3 views
0

Я новичок в APScheduler
Для тестирования я установил max_worker=2 и добавил 4 планировщика заданий. Я планировал запустить 2 задания параллельно из-за ограничения threadpool, я подумал, что после завершения определенной работы еще одна добавленная работа будет брошена в threadpool, но результат ниже - это не то, что я ожидал, он просто выполнял первые 2 задания.Как добавить задания в threadpool с APScheduler

Arg is 1, time is Mon Apr 18 19:51:33 2016 
Arg is 2, time is Mon Apr 18 19:51:33 2016 
No handlers could be found for logger "apscheduler.scheduler" 
Arg is 1, time is Mon Apr 18 19:51:37 2016 
Arg is 2, time is Mon Apr 18 19:51:37 2016 
Arg is 1, time is Mon Apr 18 19:51:41 2016 
Arg is 2, time is Mon Apr 18 19:51:41 2016 
Arg is 1, time is Mon Apr 18 19:51:45 2016 
Arg is 2, time is Mon Apr 18 19:51:45 2016 
... 

А вот код:

import time 
from apscheduler.schedulers.blocking import BlockingScheduler 

def job(arg): 
    print 'Arg is %s, time is %s' % (arg, time.ctime()) 
    time.sleep(2) 

if __name__ == '__main__': 
    scheduler = BlockingScheduler({'apscheduler.executors.default': {'class': 'apscheduler.executors.pool:ThreadPoolExecutor', 'max_workers': '2'}}) 
    scheduler.add_job(job, 'interval', seconds=2, args=(1,)) 
    scheduler.add_job(job, 'interval', seconds=2, args=(2,)) 
    scheduler.add_job(job, 'interval', seconds=2, args=(3,)) 
    scheduler.add_job(job, 'interval', seconds=2, args=(4,)) 

    try: 
     scheduler.start() 
    except (KeyboardInterrupt, SystemExit): 
     pass 

Любые способы, чтобы добавить оставшиеся рабочие места для Threadpool или что-то вроде схемы очереди или multiprocessing.dummy.pool

ответ

1

Работа, которая пропустит запланированное время любой причина признается пропущенной, и эти задания не запускаются. В вашем случае рабочие места пропущены из-за отсутствия свободного рабочего. Добавьте параметр misfire_grace_time=1 (или в другое время) к вызову add_job.

0

Возможно, вы хотели бы использовать несколько исполнителей пула потоков и ограничить определенные задания определенными исполнителями?