2017-12-26 13 views
0

こんにちは私はDjangoプロジェクトでAPSchedulerを使用しています。どのように私は仕事が完了したときにPythonで関数の呼び出しを計画することができますか?コールバック関数。APSchedulerコールバック関数 - ジョブが完了したら、Pythonでfuntion/moduleをどのように呼び出すことができますか?

DBにジョブをDjangoモデルとして保存します。それが完了すると、テーブルにcompleted=1としてマークします。

答えて

1

最も簡単で一般的な方法は、スケジュールされたジョブの最後にコールバック関数を追加することです。スケジューラークラスの上にビルドして、タスクの最後にself.function_callback()を組み込むこともできます。

クイック例:

def tick(): 
    print('Tick! The time is: %s' % datetime.now()) 
    time.sleep(10) 
    function_cb() 

def function_cb(): 
    print "CallBack Function" 
    #Do Something 

if __name__ == '__main__': 
    scheduler = AsyncIOScheduler() 
    scheduler.add_job(tick, 'interval', seconds=2) 
    scheduler.start() 
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C')) 
    # Execution will block here until Ctrl+C (Ctrl+Break on Windows) is pressed. 
    try: 
     asyncio.get_event_loop().run_forever() 
    except (KeyboardInterrupt, SystemExit): 
     pass 
     scheduler.shutdown(wait=False) 
+0

はい、私は同意するものとします。私はgitterチャンネルで作者に尋ねましたが、これはAPSchedulerでは不可能であることがわかりました。あなたが言うことは合法ですが、私のユースケースは、起動するプロセスに時間がかかるため、スケジューラがジョブを起動したときに完全なものとしてマークすることはできません。私が知ることができるのは、完全な状態を示す独立した別のジョブを追加することですが、(1)何も保証することはできません。(2)醜いです。だから最後に私はこれをあきらめました。それをマークしてはいけません。ありがとうございます。 – FaithReaper

関連する問題