2016-04-18 10 views
0

私はAPSchedulerを初めて使用しています
テスト用にmax_worker=2を設定し、スケジューラに4つの異なるジョブを追加しました。私は、スレッドプールの制限のために2つのジョブを並行して実行しようとしましたが、特定のジョブを終了した後で、追加されたジョブがスレッドプールに投げ込まれると思っていましたが、以下の結果は私が期待したものではありません。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 

スレッドプールまたはキュー・スキームのようなものか、いずれかによってスケジュールされた時間を欠場

答えて

1

ジョブをmultiprocessing.dummy.poolする残りのジョブを追加するための任意の方法理由は失火と認識され、これらの仕事は開始されません。あなたのケースでは、フリーの労働者が不足しているため失業しています。パラメータmisfire_grace_time=1(または別の時間)をadd_jobコールに追加します。

0

おそらく、複数のスレッドプールエグゼキュータを使用し、特定のエグゼキュータに特定のジョブを制限したいとしますか?

関連する問題