- blogs:
- cles::blog
« iOS 13 にアップデート :: ファンが壊れた »
2019/09/21

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

Python で cron のように特定の時刻にメソッドを実行する方法が欲しかったので調べてみました。
Java だと Quartz のようなライブラリがありますが、Python では APScheduler を使うのが一般的なようです。
- Advanced Python Scheduler — APScheduler 3.6.1.post9 documentation
- agronholm/apscheduler: Task scheduling library for Python
† セットアップ
ライブラリのインストールは 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でログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
« iOS 13 にアップデート :: ファンが壊れた »
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(114421)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112944)
3 . 年次の人間ドックへ(112370)
4 . 2023 年分の確定申告完了!(1つめ)(111939)
5 . 三菱鉛筆がラミーを買収(111813)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112944)
3 . 年次の人間ドックへ(112370)
4 . 2023 年分の確定申告完了!(1つめ)(111939)
5 . 三菱鉛筆がラミーを買収(111813)
cles::blogについて
Referrers