Hauptmenü

Multithreading

Begonnen von dominik, 15 Januar 2016, 23:03:01

Vorheriges Thema - Nächstes Thema

dominik

Ich entwickle gerade die Module 98_DLNAClient.pm (DLNA Modul für Streaming) und 98_BOSEST.pm (BOSE SoundTouch). Dabei stelle ich mir immer wieder die Frage wie ich mit Threads und Internal Timer umgehe. Generell muss ich sowohl beim DLNA Client als auch für BOSE laufend einen Discovery Thread (UPnP und Bonjour) laufen lassen um die Geräte laufend zu finden und deren Presence Status zu erkennen.
Da ich nicht unzählige Threads in Modulen generieren möchte, stelle ich mir gerade folgende Fragen:
- InternalTimer: Läuft der Aufruf der Funktion in Main Thread oder ruft InternalTimer die Funktion in einem eigenen Thread auf?
- Readings: Da ich in Threads auch immer wieder die Readings aktualisieren muss, habe ich gerade eine nicht so schönes Lösung dafür implementiert. Die Threads schicken über eine Thread Queue deren Updates an den Hauptprozess, dort lass ich alle 0.5s die Funktion BOSEST_Check aufrufen um zu prüfen ob Readings aktualisiert werden müssen, damit ich dann im Hauptprozess die Updates durchführen kann.
- Gibt es eine Funktion die laufend vom Main Thread aufgerufen wird? Dann kann ich mir den 0.5s InternalTimer für eigenen Funktionen sparen.
- Gibt es sonst gute Lösungen aus anderen Threads die Readings zu aktualisieren?

Mögliche langfristige Lösung:
- Was haltet ihr davon in fhem einen eigenen Discovery Thread laufen zu lassen, der automatisch IP Devices (und andere) scannt und dann eventuell auch erstellt. Z.B. könnte man bei erkennen eines BOSE SoundTouch Systems gleich die Speaker erstellen. Gleiches für SONOS, Samsung TV, DLNA Devices, etc.. Aktuell ist nämlich eine solche Funktionalität in SONO (UPnP) integriert und ich baue nun das gleiche für BOSE (Bonjour).
- Was haltet ihr von readings* Funktionen die Multithreading supporten? Man kann dann in readings* eine Queue befüllen und im Main Thread dann diese Queue abarbeiten.
- Ob nun Multithreading oder mehrere Prozesse kann man sich ja danach noch überlegen ;)
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik