2016-04-18 10 views
0

Ich bin neu in APScheduler
Zum Testen habe ich max_worker=2 eingestellt und 4 verschiedene Jobs zum Scheduler hinzugefügt. Ich beabsichtigte, zwei Jobs parallel laufen zu lassen, weil der Threadpool begrenzt war. Ich dachte, dass nach dem Abschluss eines bestimmten Jobs ein neuer Job in Threadpool geworfen wird, aber das Ergebnis ist nicht das, was ich erwartet habe.So fügen Sie Jobs zum Threadpool mit APScheduler hinzu

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 
... 

Und hier ist der Code:

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 

Alle Möglichkeiten verbleibenden Arbeitsplätze in den thread oder Schema etwas wie Warteschlange oder multiprocessing.dummy.pool

Antwort

1

Jobs, die von jeder geplanten Zeitpunkt verpassen Grund wird als falsch erkannt und diese Jobs werden nicht gestartet. In Ihrem Fall werden Jobs wegen mangelnder freier Mitarbeiter fehlgeschlagen. Fügen Sie den Parameter misfire_grace_time=1 (oder zu einem anderen Zeitpunkt) zum add_job Aufruf hinzu.

0

Vielleicht möchten Sie mehr als einen Thread-Pool-Executor verwenden und bestimmte Jobs auf bestimmte Executoren beschränken?