現在の時刻と cron 仕様を考慮して、イベントの次の実行時刻を計算する効率的な方法は何ですか?
「仕様に一致するかどうかを毎分チェックするループ」以外のものを探しています。
仕様の例は次のとおりです。
- 毎月1日と15日の15:01
- 毎時10分、20分、30分、40分、50分
Python コードも素敵ですが、疑似コードや高レベルの説明も歓迎します。
[更新] 仕様が既に解析されており、妥当な形式になっていると仮定します。
それを見るだけで、私はあなたがする必要があると思います:
曜日と月を同時に処理する方法がわかりません。方法はあると思いますが、一方で、実際に両方を指定したスペックを見たことがないと思います。どちらか一方のハンドラーを作成し、両方を受け取った場合はエラーをスローするだけで十分だと思います。
編集:明らかに、曜日と月の両方が指定されている場合は、両方で発生することになっています。つまり、ルールが「15日、水曜日」の場合、15日ごとと毎週水曜日に発生します。
croniterパッケージはあなたが望むことをします:
import croniter
import datetime
now = datetime.datetime.now()
sched = '1 15 1,15 * *' # at 3:01pm on the 1st and 15th of every month
cron = croniter.croniter(sched, now)
for i in range(4):
nextdate = cron.get_next(datetime.datetime)
print nextdate
プリント
2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00
実際のイテレータとして記述されていればいいのですが。多分私は私の次のプロジェクトを持っています;-)