Daten aus einer Queue effizient verarbeiten
Verfasst: Dienstag 15. September 2020, 10:02
Hallo zusammen,
folgende Ausgangssituation:
Ich bekomme über eine Queue von verschiedenen Sensoren Werte in einer strukturierten Reihenfolge paketweise übermittelt. Die Länge ( Anzahl der Pakete) der Daten variiert und kann ich nicht vorherbestimmen.
Diese werden zwischen gespeichert. Die Daten der Sensoren kommen allerdings unterschiedlich an, je nachdem welcher gerade die Verbindung hatte. (z.B. Sensor2 Pakete 1.2.3.4., Sensor1 Pakete 1.2.3.4.5.6.7.8., Sensor2 Pakete 5.6.7.8.9.10.11.12., Sensor1 Pakete 9.10.)
Wenn 10 sek. nach dem letzten Dateneingang eines Sensors keine Daten eingegangen sind verarbeite ich die Daten weiter.
Zur Zeit speichere ich den Zeitpunkt des Datenpaketeingangs pro Sensor, in einer separaten Datei und starte einen Thread mit den Argumenten der Sensor ID, der Paketnummer und den Zeitstempel des Datenpaketeingangs. (Für jedes Datenpaket einen Thread)
Jeden dieser Threads lege ich für 10 sek. schlafen. Danach lese ich den Zeitstempel aus und prüfe die Differenz zwischen der gespeicherten und der Aktuellen Zeit. Wenn die Differenz größer als die 10 sek. ist weiß ich das ich die Daten weiter verarbeiten kann.
Wenn viele Datenpakete eingehen > 100 funktioniert das ganze nicht mehr und so recht komme ich auch auf keine gescheite Lösung.
Das Programm soll letztlich auf einem PI Zero laufen.
Ich habe mir überlegt für jeden Sensor einen Thread mit einer eigenen Queue anzulegen und in diese Queue die Zeitstempel rein zuschieben und diese dann in dem Thread weiter zu verarbeiten.
zur den Fragen:
Kann ich Queues den Threads zuordnen?
Hat jemand von euch eine einfachere Idee das um zusetzten? Vielleicht denke ich auch zu kompliziert.
Vielen Dank vorab schon mal.
folgende Ausgangssituation:
Ich bekomme über eine Queue von verschiedenen Sensoren Werte in einer strukturierten Reihenfolge paketweise übermittelt. Die Länge ( Anzahl der Pakete) der Daten variiert und kann ich nicht vorherbestimmen.
Diese werden zwischen gespeichert. Die Daten der Sensoren kommen allerdings unterschiedlich an, je nachdem welcher gerade die Verbindung hatte. (z.B. Sensor2 Pakete 1.2.3.4., Sensor1 Pakete 1.2.3.4.5.6.7.8., Sensor2 Pakete 5.6.7.8.9.10.11.12., Sensor1 Pakete 9.10.)
Wenn 10 sek. nach dem letzten Dateneingang eines Sensors keine Daten eingegangen sind verarbeite ich die Daten weiter.
Zur Zeit speichere ich den Zeitpunkt des Datenpaketeingangs pro Sensor, in einer separaten Datei und starte einen Thread mit den Argumenten der Sensor ID, der Paketnummer und den Zeitstempel des Datenpaketeingangs. (Für jedes Datenpaket einen Thread)
Jeden dieser Threads lege ich für 10 sek. schlafen. Danach lese ich den Zeitstempel aus und prüfe die Differenz zwischen der gespeicherten und der Aktuellen Zeit. Wenn die Differenz größer als die 10 sek. ist weiß ich das ich die Daten weiter verarbeiten kann.
Wenn viele Datenpakete eingehen > 100 funktioniert das ganze nicht mehr und so recht komme ich auch auf keine gescheite Lösung.
Das Programm soll letztlich auf einem PI Zero laufen.
Ich habe mir überlegt für jeden Sensor einen Thread mit einer eigenen Queue anzulegen und in diese Queue die Zeitstempel rein zuschieben und diese dann in dem Thread weiter zu verarbeiten.
zur den Fragen:
Kann ich Queues den Threads zuordnen?
Hat jemand von euch eine einfachere Idee das um zusetzten? Vielleicht denke ich auch zu kompliziert.
Vielen Dank vorab schon mal.