Google App Engine の cron には、cron ジョブ スケジューリング用の人間が読める構文があります。
https://developers.google.com/appengine/docs/python/config/cron#The_Schedule_Format
アプリケーションに同様の機能を実装するにはどうすればよいですか?
編集:彼らはantlr3ライブラリを使用していると思いますが、彼らがそれをどのように使用しているかを理解できませんでした.
Google App Engine の cron には、cron ジョブ スケジューリング用の人間が読める構文があります。
https://developers.google.com/appengine/docs/python/config/cron#The_Schedule_Format
アプリケーションに同様の機能を実装するにはどうすればよいですか?
編集:彼らはantlr3ライブラリを使用していると思いますが、彼らがそれをどのように使用しているかを理解できませんでした.
わかりました、この例では、調べる必要がある 2 つのスポットがあります。
最初の antlr は、パーサーが英語/人間が読める形式をトークンのストリームとしてプログラムに解析できるようにするものです。この文字列から、次のような意味を判断します。
run backup every 2 days
これは、次のようなトークンのストリームになります。
<command_type> := run
<command_to_run> := backup
<time_frame_times> := every
<digit> := 2
<time_frame_modifier> := days
ここから、次のように記述できる (簡略化された形式の) ある種のステート マシンを使用して、文の意味を判断します。
if token == command_type:
switch( token.val )
case "run":
state = run
program = tokens.pop().val
if token == time_frame_times:
switch( token.val )
case "every":
time_frame_state = repeat_indefinitely
if token == time_frame_modifier:
switch( token.val )
case "days":
time_frame_modifier = every_N_days
if token == digit:
switch( time_Frame_modifier )
case every_N_days:
time_frame_modifier_value = token.val
文字列を必要な値に解析するには、そのようなもので十分です。
2番目の部分は、これをcron
それ自体に接続するか、プログラム自体に独自のスケジューラを作成することです。これは、ユースケースのラインに沿っていると思います。
Antlr Python: http://www.antlr.org/wiki/display/ANTLR3/Python+runtime