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.
Daten aus einer Queue effizient verarbeiten
Woher weißt Du, welche Paketnummer gerade gesendet wird? Ich würde ja einfach, wenn wieder ein Paket mit der Nummer 1 kommt, die davor speichern.
Das mit der Queue verstehe ich nicht. Du übergibst diese ja als Argument dem Thread.
Und wie immer sagt Code mehr als Tausend Worte.
Das mit der Queue verstehe ich nicht. Du übergibst diese ja als Argument dem Thread.
Und wie immer sagt Code mehr als Tausend Worte.
Hallo vielen Dank schon mal.
Leider kann ich nicht vorher sagen wann ein Sensor wieder ein Paket senden wird. Ich kann auch nicht mit dem Sensor kommunizieren um z.B. abzufragen ob der neue Daten für mich hat.
Zur Queue:
ich habe mir das so gedacht:
Queue1 ---- Sensor1 --- Thread1
Queue2 --- Sensor2 --- Thread2
Queue3 --- Sensor3 --- Thread3
Mit Threads und der Kommunikation zwischen diesen bin ich noch unerfahren.
Ich habe das bis jetzt so verstanden das, wenn ich eine Queue nur nutze, diese dann von allen Threads genutzt wird. Wenn ich da die Zeitstempel sensorbezogen rein schiebe stehen diese unter Umständen den zugehörigen Threads nicht mehr zur Verfügung, richtig?
Leider kann ich nicht vorher sagen wann ein Sensor wieder ein Paket senden wird. Ich kann auch nicht mit dem Sensor kommunizieren um z.B. abzufragen ob der neue Daten für mich hat.
Zur Queue:
ich habe mir das so gedacht:
Queue1 ---- Sensor1 --- Thread1
Queue2 --- Sensor2 --- Thread2
Queue3 --- Sensor3 --- Thread3
Mit Threads und der Kommunikation zwischen diesen bin ich noch unerfahren.
Ich habe das bis jetzt so verstanden das, wenn ich eine Queue nur nutze, diese dann von allen Threads genutzt wird. Wenn ich da die Zeitstempel sensorbezogen rein schiebe stehen diese unter Umständen den zugehörigen Threads nicht mehr zur Verfügung, richtig?