BLOGTIMES
2019/09/21

Python で cron のように定期的にメソッドを実行する

  python 
このエントリーをはてなブックマークに追加

Python で cron のように特定の時刻にメソッドを実行する方法が欲しかったので調べてみました。
Java だと Quartz のようなライブラリがありますが、Python では APScheduler を使うのが一般的なようです。

セットアップ

ライブラリのインストールは pip で一撃なので、簡単です。

pip install apscheduler

サンプルプログラム

NICT のインターネット時刻供給サービスRequests 使って1分ごと( cron の定義だと「* * * * *」)に取得するというプログラムを書いてみました。
僕は cron に慣れているので、こういうライブラリも cron 表記ができる方が好みです。

schedulersample.py

#!/usr/bin/env python from logging import INFO, WARNING, basicConfig, getLogger import requests from apscheduler.schedulers.blocking import BlockingScheduler from apscheduler.triggers.cron import CronTrigger CRONTAB = '* * * * *' URL = 'http://ntp-a1.nict.go.jp/cgi-bin/time' def jobFunc(): response = requests.get(URL) logger.info("Response: %s" % (response.text)) if __name__ == "__main__": basicConfig(level=INFO, datefmt='%Y-%m-%d %H:%M:%S',format="%(asctime)s [%(levelname)s] %(filename)s:%(lineno)d - %(name)s - %(message)s") getLogger('apscheduler').setLevel(WARNING) logger = getLogger(__name__) logger.info("Program Started!") sched = BlockingScheduler() logger.info("CronTrigger: %s" % CRONTAB) sched.add_job(jobFunc, CronTrigger.from_crontab(CRONTAB)) logger.info("Scheduler Started!") sched.start()

実際に起動してみると、以下のような感じで1分ごとに定期的にメソッドが実行されていることが分かります。

2019-09-21 18:20:41 [INFO] schedulersample.py:19 - __main__ - Program Started! 2019-09-21 18:20:42 [INFO] schedulersample.py:22 - __main__ - CronTrigger: * * * * * 2019-09-21 18:20:42 [INFO] schedulersample.py:25 - __main__ - Scheduler Started! 2019-09-21 18:21:00 [INFO] schedulersample.py:13 - __main__ - Response: Sat Sep 21 18:20:59 2019 JST 2019-09-21 18:22:00 [INFO] schedulersample.py:13 - __main__ - Response: Sat Sep 21 18:21:59 2019 JST 2019-09-21 18:23:00 [INFO] schedulersample.py:13 - __main__ - Response: Sat Sep 21 18:22:59 2019 JST 2019-09-21 18:24:00 [INFO] schedulersample.py:13 - __main__ - Response: Sat Sep 21 18:23:59 2019 JST ・・・・・・

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/11238
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン