PythonでAPSchedulerを用いて定期的なスケジュールを設定し処理を実行する

スポンサーリンク

PythonでAPSchedulerを用いて定期的なスケジュールを設定し処理を実行してみます。

今回はAPSchedulerを用います。このライブラリ・モジュールは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.7.9」を使用しています。(Windows10)(pythonランチャーでの確認)

■APSchedulerを用いて定期的なスケジュールを設定し処理を実行する

では、APSchedulerを用いて定期的なスケジュールを設定し処理を実行するスクリプトを書いていきます。

■コード

from datetime import datetime
from datetime import date
from apscheduler.schedulers.blocking import BlockingScheduler

def job(text):
    print("こんにちは世界")

scheduler_test = BlockingScheduler()

scheduler_test.add_job(job,'date',run_date='2022-2-9 07:39:00',args=['test1'])

scheduler_test.add_job(job,'date',run_date='2022-2-9 07:40:00',args=['test2'])

scheduler_test.start()

「from import」でPythonの標準ライブラリであるdatetimeモジュールのdatetime,dateと、apscheduler.schedulers.blockingのBlockingSchedulerを呼び出します。

呼び出し後に、def文を用いてスケジュールを設定した後に、呼び出す関数を定義します。今回はjobという関数を定義し、括弧内に引数,パラメータとしてtextを設定します。関数を呼び出した後に、実行される処理としては、print()で文字列を出力するようにします。

その後、scheduler_testという変数を定義し、その中にBlockingScheduler()を格納します。単純なスケジューラーを作ります。

スケジューラーのジョブリストにadd_job()を用いて、ジョブを追加します。括弧内の第1の引数,パラメータには、ジョブとしてjob変数を渡します。その他に関数が実行される時間(日時)を渡し、関数を呼び出すための位置引数なども引数,パラメータに設定し渡します。

最後に、スケジューラーを開始するために、start()を用いてスケジューラーを開始させます。

■実行・検証

このスクリプトを「scheduler.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\apscheduler\util.py:95: PytzUsageWarning: The zone attribute is specific to pytz’s interface; please migrate to a new time zone provider. For more details on how to do so, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
if obj.zone == ‘local’:
C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\apscheduler\util.py:166: PytzUsageWarning: The localize method is no longer necessary, as this time zone supports the fold attribute (PEP 495). For more details on migrating to a PEP 495-compliant implementation, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
return tz.localize(datetime_, is_dst=None)

実行してみると、「PytzUsageWarning」という警告が出力されました。出力されましたが、スケジューラーに追加したジョブは実行され、今回定義した関数の処理も、指定した時間(日時)で実行されることが確認できました。

今回発生した「PytzUsageWarning」という警告を調べてみると、タイムゾーンに設定する必要、もしくはtzlocalをダウングレードすると、改善できるようです(https://blog.csdn.net/weixin_43937959/article/details/121765270)が、今回は行わず、今回の検証はここまでとします。改善できるかは、また後日行う予定ではありますが、いつかは未定です。

コメント

タイトルとURLをコピーしました