19

現在の時刻と cron 仕様を考慮して、イベントの次の実行時刻を計算する効率的な方法は何ですか?

「仕様に一致するかどうかを毎分チェックするループ」以外のものを探しています。

仕様の例は次のとおりです。

  • 毎月1日と15日の15:01
  • 毎時10分、20分、30分、40分、50分

Python コードも素敵ですが、疑似コードや高レベルの説明も歓迎します。

[更新] 仕様が既に解析されており、妥当な形式になっていると仮定します。

4

1 に答える 1

27

それを見るだけで、私はあなたがする必要があると思います:

  • chron仕様を、各フィールドの許容値を含む5つの配列に解析します。
  • 'now'を各フィールドの値に解析します。
  • 分、時間、{日または曜日}、月の順に:現在の値と一致するか、それを超える最小の配列値を見つけて、キャリーを補正します。

曜日と月を同時に処理する方法がわかりません。方法はあると思いますが、一方で、実際に両方を指定したスペックを見たことがないと思います。どちらか一方のハンドラーを作成し、両方を受け取った場合はエラーをスローするだけで十分だと思います。

編集:明らかに、曜日と月の両方が指定されている場合は、両方で発生することになっています。つまり、ルールが「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

実際のイテレータとして記述されていればいいのですが。多分私は私の次のプロジェクトを持っています;-)

于 2011-01-06T02:13:14.360 に答える