Pythonでcronジョブを回すのに何か良いアイデアはないかなと探しいたところ、APSchedulerというライブラリを見つけた。
基本的にできることは以下のようなところ。
- 開始/終了時間を設定した上でのcronスケジューリング
- 均等間隔でcronを実行
- 設定した日時に1回限り実行
今回は10分おきにAPIを叩いて、情報が取得できた場合はそのデータを保存する的なやつを作る予定だったので、この要件には十分満たしていた。あとは、環境やフレームワークごとにそれぞれSchedulerを起動するメソッドが用意されているので結構便利。
APSchedulerをインストール
$ pip install apscheduler
処理を書く
app/schedule.py
def hello_world():
print("Hello World!")
sched = BackgroundScheduler(standalone=True,coalesce=True)
sched.add_job(hello_world, 'interval', minutes=1)
sched.start()
これで1分おきに「Hello World!」が表示される。
読み込む
Flaskでアプリケーションを作っていたので、__init__.py
で読み込んであげれば、ローカル環境でも、本番環境(Heroku)でも問題なく動いていた。
app/__init__.py
import app.schedule
ライブラリを読んで進めれば何てことはないのだけど、案外日本語の記事がすぐに出てこなかったりもしたので、備忘録的に残しておいた。