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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top