APSchedulerを使ってBackground Jobを行ってみる

Herokuで30秒以上かかるプログラム(メール送信、Push通知の送信 etc…)を実行させる場合はプログラムをバックグラウンドで実行させる必要があるのですが、APSchedulerというライブラリを使うと簡単に実装ができたので自分のためにメモしておきます。

Install

まずは、APSchedulerをインストールします。
$ pip install apscheduler
$ pip freeze > requirements.txt

Coding

次にclock.pyを作成します。

例として平日はdo_workメソッドを呼び出して、休日はdo_restメソッドを日本時間の9時30分に定期的に実行するプログラムを書いてみます。

clock.py

from apscheduler.schedulers.blocking import BlockingScheduler
import logging


logging.basicConfig()
sc = BlockingScheduler()


@sc.scheduled_job('cron',day_of_week='mon-fri', hour=0,minute=30)
def do_work():
    print('Do work.')
@sc.scheduled_job('cron',day_of_week='sat-sun', hour=0,minute=30)
def do_rest():
    print('Do rest.')

sc.start()

次に以下のコマンドでclockをプロセスを起動させます。

$heroku ps:scale clock=1

最後にProcfileの箇所に
clock: python clock.py
と記述して完了です。

蛇足

ちなみにclock.pyのログは

$ heroku logs -t -p clock 
で確認することができます。

Related Contents

Pickup Contents