時間のインターバルをcron的に扱うPythonモジュール書いた

ちょっと前の話なんですが、croniterというモジュールを書きました。これは何かというと時間に紐付いた繰り返し処理を扱うモジュールです。例えば「毎週火曜日と木曜日の9時」とか「日曜日の5時から10時まで1時間ごと」にとか、そういう繰り返しを扱いたいときに使う事を想定しています。

基本的な使い方は以下になります。お気づきの通りcronと同じ形式で繰り返しを指定します。baseで特定の日時以降での繰り返しです。後はnextを呼び出すたびに次のdatetimeオブジェクトを取得できます。

#!/usr/bin/python

from datetime import datetime
from croniter import croniter

# 2010年8月7日始まりで、平日の9時
base = datetime(2010, 8, 7, 0, 0)
iter = croniter('0 9 * * mon,tue,wed,thu,fri', base)
print iter.get_next(datetime) #2010-08-09 09:00:00
print iter.get_next(datetime) #2010-08-10 09:00:00
print iter.get_next(datetime) #2010-08-11 09:00:00

# 1990年からの1月1日
base = datetime(1990, 1, 1, 0, 0)
iter = croniter('2 4 1 1 *', base)
print iter.get_next(datetime) #1990-01-01 04:02:00
print iter.get_next(datetime) #1991-01-01 04:02:00
print iter.get_next(datetime) #1992-01-01 04:02:00

意外と時間の間隔を調整するのは大変なので、もしかしたら役に立つかもしれません。僕はクローラのクロール間隔を、条件によって動的に調整するのに使っています。pypiに登録していますので、以下でインストールできます。よろしければどうぞ。

$ easy_install croniter

Leave a Reply

Your email address will not be published. Required fields are marked *