APSchedulerタイミングタスクは、クォーツのPythonのフレームワークに基づいています。タスクの日付に基づいて、一定時間間隔のcrontabの種類を提供し、タスクが永続することができます。
オンラインドキュメントします。https://apscheduler.readthedocs.io/en/latest/userguide.html
まず、APSchedulerをインストール
apschedulerをインストールするPIP
第二に、基本的な概念
APSchedulerは、4つのコンポーネントがあります:
1、トリガーはトリガー:
トリガーは、スケジューリングロジックを備えます。各ジョブには、次のタスクを実行するかを決定するための独自のトリガーを持っています。初期構成に加えて、トリガーが完全にステートレスです。
内蔵トリガ3つがあります。
DATE(1):特定の時点トリガするために
(2)間隔:固定間隔トリガ
(3)クーロン:特定の時間に定期的にトリガ
2、タスクストアジョブストア:タスクを格納するために、タスクがメモリ(デフォルトMemoryJobStore)またはデータベースに格納されています。
図3に示すように、アクチュエータエグゼキュータ:アクチュエータは、タスクが完了したスレッドプールタスクまたはプールで実行中のプロセス、に提出され、アクチュエータの通知は、対応するイベント・スケジューラをトリガします。
4、スケジューラスケジューラ:上記の3つの成分などのパラメータは、スケジューラはインスタンスを作成することによって動作する
:開発のニーズに応じて適切なコンポーネントを選択するために、次のコンポーネントは、異なるスケジューラである
BlockingSchedulerブロッキングスケジューラ:スケジューラを実行するのみ適用しますプログラム。
BackgroundSchedulerバックグラウンドスケジューラ:非ブロックの場合には、スケジューラは、バックグラウンドで独立して実行されます。
AsnycIOを用いた場合のアプリケーションのためのAsyncIOScheduler AsyncIOスケジューラ。
GEvent状況で使用するためGeventScheduler Geventスケジューラ。
トルネードのためTornadoSchedulerトルネードスケジューラは、アプリケーションを構築します。
アプリケーションを構築するためのツイストTwistedSchedulerツイストスケジューラ。
スケジューラQtSchedulerのQt、Qtは建物の用途に使用します。
第三には、手順使用して
1、新しいスケジューラスケジューラ
2を、スケジュールされたタスクを加えた
3、スケジュールされたタスクの実行
第四に、ユースケース
1、トリガー日
トリガーは1回だけ実行され、特定の時点。パラメータは次のとおりです。
パラメータ | 説明 |
run_date(日時或文字列) | 実行日付や時刻の仕事 |
タイムゾーン(datetime.tzinfo或列str) | タイムゾーンを指定 |
例を使用します。
日時インポート日時 から日時の輸入日 から apscheduler.schedulers.blocking インポートBlockingScheduler デフジョブ(テキスト) の印刷を(テキスト) スケジューラ = BlockingScheduler() #在2019年8月30日运行ジョブ方法の一次 scheduler.add_job(ジョブ、「日付'run_date =日付(2019、8、30)、引数= [ ' テキスト1 ' ]) #2019年8月30日午前1時00分00秒运行一次ジョブ方法の在 scheduler.add_job(ジョブ、' 日'、Run_date =日時(2019 ,. 8、30 ,. 1、0、0)、引数= [ ' テキスト2 ' ]) #ジョブの実行2019年8月30日1時00分01秒方法で scheduler.add_job(ジョブ、' DATE 'run_date = ' 2019年8月30日午前1時00分00秒'引数= [ ' テキスト3 ' ]) scheduler.start()
図2に示すように、トリガ間隔
一定の時間間隔トリガ。パラメータは次のとおりです。
パラメータ | 説明 |
週(INT) | 週間隔 |
日(INT) | 数日間隔 |
時間(INT) | インターバル時間 |
分(INT) | 分からの範囲の間隔 |
秒(INT) | どのように多くの秒間隔 |
START_DATE(日時或文字列) | 開始日 |
END_DATE(日時或文字列) | 終了日 |
タイムゾーン(datetime.tzinfo或列str) |
例を使用します。
インポート時間 から apscheduler.schedulers.blocking インポートBlockingScheduler DEF ジョブ(テキスト): Tは time.strftimeを=(' %Y-M-%のD %% H:%のM:%のS ' 、time.localtime(time.time()を)) プリント(' {} --- {} ' .format(テキスト、T)) スケジューラ = BlockingScheduler() #毎1分ジョブメソッド実行 scheduler.add_job(ジョブ、' 区間'、= 1分、引数= [ 「JOB1というジョブ」]) #2019年8月29日に2019年8月29日午前22時15分○○秒午後09時17分00秒の間に、1分ごとに30秒がジョブメソッドを実行します scheduler.add_job(仕事、' 間隔'、=。1分、30秒=、START_DATE = ' 2019年8月29日午前22時15分00秒'、END_DATE = ' 2019年8月29日午後10時17分○○秒'、引数= [ ' JOB2 ' ]) scheduler.start() ' '' :実行結果 JOB2 --- 2019年8月29日22時15分00秒 のジョブをそのJOB1 --- 2019年8月29日午後10時15分46秒 --- JOB2 2019午後十時16分30秒-08-29 仕事そのJOB1 --- 2019年8月29日午後09時16分46秒 JOB1 2019年8月29日午前22時17分46秒は---という仕事 ... ...残りの部分が省略されています 「」 '
3、cronがトリガー
定期的に特定の時間に起動。パラメータは次のとおりです。
パラメータ | 説明 |
年(intまたはSTR) | 年4桁 |
月(intまたはSTR) | ヶ月(範囲1-12) |
日(intまたはSTR) | 日(範囲1-31) |
週(intまたはSTR) | 週間(範囲1-53) |
DAY_OF_WEEK(int型の或文字列) | 最初の数日または数週間の週(範囲0-6か月、火曜、結婚、木、金、土、日) |
時間(intまたはSTR) | 場合(範囲0-23) |
分(intまたはSTR) | (範囲0-59) |
第二(intまたはSTR) | 秒(範囲0-59) |
START_DATE(日時或文字列) | 最早開始日(付属) |
END_DATE(日時或文字列) | 最新の終了時間(付属) |
タイムゾーン(datetime.tzinfo或列str) | タイムゾーンを指定 |
これらのパラメータは算術式をサポートし、以下のように、フォーマットの値は、次のとおり
例を使用します。
インポート時間 から apscheduler.schedulers.blocking インポートBlockingScheduler DEF ジョブ(テキスト): T = time.strftime(' %Y-%M-%D%H:%のM:%のS ' 、time.localtime(time.time() )) プリント(' {} --- {} ' .format(テキスト、T)) スケジューラ = BlockingScheduler() #在每天22点、每隔1分钟运行一次ジョブ方法の scheduler.add_job(ジョブ、' クーロン'、時間= 22分= ' * / 1 '、引数の= [ ' JOB1 ' ]) #一日あたり22〜25分、23点で、ジョブ実行方法一度 scheduler.add_job(ジョブ、' クーロン'、時間= ' 22-23 '、分= ' 25 '、引数の= [ ' JOB2 ' ]) scheduler.start( ) 「'」 業績を: ジョブをそのJOB1 --- 2019年8月29日午後09時25分00秒 JOB2 --- 2019年8月29日午後09時25分00秒 の仕事そのJOB1 --- 2019年8月29日夜10時26分00秒 の仕事というJOB1 2019年8月29日午後10時27分00秒--- ... ...残りの部分は省略されています '「」
4、デコレータscheduled_jobにより添加する方法()
タスクを追加する方法は2つあります。
(1))(add_jobを呼び出す---コード1-3上記参照によって
デコレータscheduled_job((2)):
第一の方法は、最も一般的に使用される方法です。第二の方法は変更されません実行しているアプリケーションで宣言されたタスクを容易にすることです。add_job()メソッドを使用して、後でタスクを変更または削除するには、この例を使用することができ、apscheduler.job.Jobインスタンスを返します。
インポート時間 から apscheduler.schedulers.blocking インポートBlockingSchedulerの スケジューラ = BlockingScheduler() scheduler.scheduled_job(@ ' 区間'、秒= 5 ) デフJOB1(): T = time.strftime(' %Y-%M-%D%Hた:%M:%S 'time.localtime(time.time())) プリント(' JOB1 --- {} ' .format(T)) scheduler.scheduled_job(@ ' のcron '第二= ' * / 7 " ) DEF トン JOB2(): time.strftime(= ' :%M%S%Y-M-%D %% H ' 、time.localtime(time.time())) プリント(' JOB2 --- {} ' .format(Tを)) scheduler.start() ' '' 実行結果: --- 2019年8月29日午後09時36分35秒JOB2を ジョブというJOB1を--- 2019年8月29日午後09時36分37秒 JOB2 --- 2019年8月29日午前22時36分42秒 ジョブJOB1 --- 2019年8月29日午後09時36分42秒という JOB1 --- 2019年8月29日午後10時36分47秒は、そのジョブ JOB2 --- 2019年8月29日午後09時36分49秒 ...残りは省略されます... 「」 '