Für Menschen lesbare Zeitplansyntax-ähnliche Funktionalität in meiner App?
-
13-12-2019 - |
Frage
Cron in der Google App Engine verfügt über eine für Menschen lesbare Syntax für die Cron-Job-Planung.
https://developers.google.com/appengine/docs/python/config/cron#The_Schedule_Format
Wie kann ich ähnliche Funktionen in meiner Anwendung implementieren, wo der Zeitplan für menschliche lesbare Format und Programm analysieren und den tatsächlichen Wert speichern?
bearbeiten:Ich glaube, sie verwenden die Antlr3-Bibliothek, aber ich konnte nicht herausfinden, wie sie sie verwenden.
Lösung
Ok, in diesem Fall gibt es zwei Stellen, die Sie untersuchen müssen.
Mit antlr erhalten Sie als ersten Parser die Möglichkeit, die englisch-/menschlich lesbaren Formate als Token-Stream in Ihr Programm zu parsen.Aus dieser Zeichenfolge ermitteln Sie dann die Bedeutung, z. B.:
run backup every 2 days
was sich in einen Strom von Token verwandeln würde, wie zum Beispiel:
<command_type> := run
<command_to_run> := backup
<time_frame_times> := every
<digit> := 2
<time_frame_modifier> := days
Von hier aus bestimmen Sie dann die Bedeutung des Satzes mithilfe einer Art Zustandsmaschine, die (vereinfacht) wie folgt geschrieben werden könnte:
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
So etwas würde ausreichen, um die Zeichenfolge in Ihre erforderlichen Werte zu analysieren.
Der zweite Teil wäre, dies zu verbinden cron
selbst oder schreiben Sie Ihren eigenen Scheduler in Ihrem Programm selbst, was meiner Meinung nach eher Ihrem Anwendungsfall entspricht.
Antlr Python: http://www.antlr.org/wiki/display/ANTLR3/Python+runtime