Struktur für zeitabhängige Aufgaben in Python

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich möchte gerne in Python in einer zeitlichen Abfolge gewisse Aufgaben erledigen. So soll in einem Pythonprogramm z.B. jede Stunde die Temperatur gemessen werden, 4 mal am Tag die Wasserhöhe in der Zisterne gemessen werden und morgens um 7:00 Uhr soll die Relais für die Zirkulationspumpe für 5 Minuten eingeschaltet werden.

    Die einzelnen Aufgaben sollen in zeitlicher Abfolge oder zur bestimmten Uhrzeit passieren.

    Wie kann ich so eine Struktur in Python aufbauen?

    Vielen Dank und einen sonnigen Nachmittag.

    whitechristmas

    Einmal editiert, zuletzt von whitechristmas (11. April 2016 um 14:37)

    • Offizieller Beitrag

    Das schreit doch eher nach cron jobs und einzelnen Scripten. ;). Muss es wirklich ein riesiges endlos Script sein?

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Man kann das mittels Queues lösen. Das Programm organisiert sich die Aufrufe zeitlich und reagiert beim eintreffen des Callbacks.
    hier als Beispiel heisst die Queue MQueue (mainqueue) und der Eintrag in die Queue ist CB@ für callback, da kann natürlich auch mehr stehen wenn notwendig. der Timer wurde hier auf 2s gestellt, das kann auch eine real Zahl sein. Also alle 2 Sekunden bekommt man einen call back mit dem Eintrag

    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!

    Einmal editiert, zuletzt von Wolfgang Glück (11. April 2016 um 15:06)

  • MQueue muss natürlich noch als Objekt instanziert werden. je nachdem welches Modul du einsetzt kann das verschieden aussehen

    ich verwende multitprocessing und da ist Queue auch schon dabei
    import multiprocessing as mp
    MQueue = mp.Queue()

    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!

  • Hallo,

    schreib' für jede Aufgabe ein Skript und lasse es zur gewünschten Zeit per systemd Timer Unit (oder Cron) ausführen. Das ist am einfachsten und hat noch zwei Vorteile: a) laufen die Skripte unabhängig, d.h. wenn z.B. die Temperaturmessung abstürzt, werden die anderen Skripte trotzdem ausgeführt. b) wenn du das als systemd Timer Unit ausführst, bekommst du das Logging, also dass das Skript gelaufen ist, direkt gratis mitgeliefert.

    Gruß, noisefloor

  • Evtl. hilft das: Eigene zyklische Abfrage in Python

    Die einfachste Möglichkeit wäre aber wirklich über crontab - allerdings würde ich nur ein Script verwenden und daran beim Aufruf ein entsprechendes Parameter übergeben :fies:

  • es kommt immer darauf wo man herkommt von der Unix Seite oder von der Applikationsseite. Für den einen ist der Umgang mit dem Betriebssystem (Crone) einfacher, für den anderen eben die Programmiersprache.
    Es gibt auch die Variante, dass man von beidem wenig Ahnung hat. Irgendeinen Tod muss man halt sterben.

    Die apllikatorische Lösung hat den Vorteil, dass man auf Windows alles testen kann ohne schon auf den RASPBY zu installieren, mit allen Tücken.

    Softwarefehler suchen ist wie Pilze suchen. Wenn man erst einen gefunden hat, findet man meist mehrere.

    Bei Hardware ist es schlimmer, da findet man bereits Fehler wenn man gar keine sucht!

    Einmal editiert, zuletzt von Wolfgang Glück (11. April 2016 um 19:35)

  • Hallo,

    Zitat

    Allerdings weiß ich nicht, wie man das mit systemd macht? Kann ich da einen Tipp haben?


    Ja - einfach mal mit systemd beschäftigen ;)

    Im Wiki von ubuntuusers.de sind Timer Units IMHO gut erklärt: https://wiki.ubuntuusers.de/systemd/Timer%20Units/. Funktioniert unter Raspbian Jessie genau so.
    Kurzfassung: du schreibst und aktivierst eine Timer Unit, die dann periodisch eine Service Unit startet. Die Service Unit führt dann dein Python-Skript aus. Klingt vielleicht im ersten Moment kompliziert - ist es aber nicht :)

    Cron funktioniert natürlich auch, systemd ist aber der "modernere" Ansatz.

    Gruß, noisefloor

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!