Mehrere Alarme aus SQL Datenbank / Logikfrage
Verfasst: Sonntag 12. Juli 2020, 13:27
Hallo Zusammen,
ich habe eine Logikfrage, wo ihr mir vielleicht weiterhelfen könnt. Und zwar habe ich eine SQL Datenbank mit verschiedenen Zeiten für verschiedene Events. Am Tag würden so 100 Events auftreten zu verschiedenen Uhrzeiten.
Liste_a=[123012, 125522,131934 ...].
Die Zeiten habe ich als Integer gewandelt und zu einer Zahl zusammengeführt, damit die Abfrage resourcensparender ist.
123012 entspricht also 12.30.12 Uhr... Die Localtime für die Abfrage wird auch in dem Format erzeugt --> 123009 z.B.
Wenn nun für die Zeit von Event X (z.B. 15.10.27) gleich der Localtime vom PC ist, soll ein Alarm auftreten --> ein Aufruf einer Funktion, die eine Audioausgabe ausgibt ("Bitte Event XY prüfen")
Mein Ansatz ist bisher (ich befürchte kein besonders resourcensparender Ansatz), die Liste mit den Eventzeiten dauerhaft in einer for Schleife zu durchlaufen und wenn SQL Time == Localtime ist, dann rufe die Funktion zur Audioausgabe auf.
Exemplarisch also so:
Nun ist es halt so, dass ich da recht viele Events aus mehreren Listen prüfen will und da permanent rekursiv bspw. die Listen zu durchlaufen, erscheint mir ungünstig. Im Exemplar fehlt auch noch die Abbruchbedingung für die Rekursion, aber die habe ich der Einfachhalber weg gelassen.
Ein Nachteil an dem Exemplar ist auch, dass ich oft Zeiten in der Vergangenheit durchlaufe, obwohl ich die eigentlich nicht mehr brauche, wenn sie schon einmal aufgetreten sind. Also interessant sind nur die Zeiten in der Zukunft.
Im Internet habe ich viel nach Python Wecker Code geschaut, aber das passt leider nicht zu meinem Problem. Das Tool soll später auf Windows Systemen laufen...bei Linux gibt es crontabs, die zu einer definierten Uhrzeit starten...gibt es da eine sinnvolle Anwendung für mein Problem?! Wie die Alternative zu Windows aussieht, muss ich aber erst recherchieren, falls das in Frage käme.
Also meine Frage zu dem Problem: Gibt es eine elegantere Möglichkeit, die jeweiligen Zeiten in der Liste mit der Lokalzeit zu prüfen, ohne dauerhaft über die Liste zu iterieren? Ich habe extra eine Sekunde delay eingebaut, damit die Threads etwas entlastet werden. Trotzdem ist die Lösung nicht gut.
Möglich wäre das einmalige iterieren über die Liste und zu den Zeiten dann sowas wie ein Alarmevent zu kreiieren, welchen eine definierte Zeit hätte, z.B. Alarmevent_x_153722...fragt sich dann trotzdem, wie ich es hinkriege, dass dieses Event exakt um 15.37.22 aufgerufen wird, ohne eben permanent die Liste durchzulaufen.
Könnt ihr mir da hinweise geben?
Besten Gruß,
m.g.od.
ich habe eine Logikfrage, wo ihr mir vielleicht weiterhelfen könnt. Und zwar habe ich eine SQL Datenbank mit verschiedenen Zeiten für verschiedene Events. Am Tag würden so 100 Events auftreten zu verschiedenen Uhrzeiten.
Liste_a=[123012, 125522,131934 ...].
Die Zeiten habe ich als Integer gewandelt und zu einer Zahl zusammengeführt, damit die Abfrage resourcensparender ist.
123012 entspricht also 12.30.12 Uhr... Die Localtime für die Abfrage wird auch in dem Format erzeugt --> 123009 z.B.
Wenn nun für die Zeit von Event X (z.B. 15.10.27) gleich der Localtime vom PC ist, soll ein Alarm auftreten --> ein Aufruf einer Funktion, die eine Audioausgabe ausgibt ("Bitte Event XY prüfen")
Mein Ansatz ist bisher (ich befürchte kein besonders resourcensparender Ansatz), die Liste mit den Eventzeiten dauerhaft in einer for Schleife zu durchlaufen und wenn SQL Time == Localtime ist, dann rufe die Funktion zur Audioausgabe auf.
Exemplarisch also so:
Code: Alles auswählen
def time_comparison():
for row in Liste_a:
time_CEST = time.localtime()
sleep(1)
if row == time_CEST:
just_speak() # Aufruf Sprachausgabe
break
time_comparison()
Nun ist es halt so, dass ich da recht viele Events aus mehreren Listen prüfen will und da permanent rekursiv bspw. die Listen zu durchlaufen, erscheint mir ungünstig. Im Exemplar fehlt auch noch die Abbruchbedingung für die Rekursion, aber die habe ich der Einfachhalber weg gelassen.
Ein Nachteil an dem Exemplar ist auch, dass ich oft Zeiten in der Vergangenheit durchlaufe, obwohl ich die eigentlich nicht mehr brauche, wenn sie schon einmal aufgetreten sind. Also interessant sind nur die Zeiten in der Zukunft.
Im Internet habe ich viel nach Python Wecker Code geschaut, aber das passt leider nicht zu meinem Problem. Das Tool soll später auf Windows Systemen laufen...bei Linux gibt es crontabs, die zu einer definierten Uhrzeit starten...gibt es da eine sinnvolle Anwendung für mein Problem?! Wie die Alternative zu Windows aussieht, muss ich aber erst recherchieren, falls das in Frage käme.
Also meine Frage zu dem Problem: Gibt es eine elegantere Möglichkeit, die jeweiligen Zeiten in der Liste mit der Lokalzeit zu prüfen, ohne dauerhaft über die Liste zu iterieren? Ich habe extra eine Sekunde delay eingebaut, damit die Threads etwas entlastet werden. Trotzdem ist die Lösung nicht gut.
Möglich wäre das einmalige iterieren über die Liste und zu den Zeiten dann sowas wie ein Alarmevent zu kreiieren, welchen eine definierte Zeit hätte, z.B. Alarmevent_x_153722...fragt sich dann trotzdem, wie ich es hinkriege, dass dieses Event exakt um 15.37.22 aufgerufen wird, ohne eben permanent die Liste durchzulaufen.
Könnt ihr mir da hinweise geben?
Besten Gruß,
m.g.od.