Alternative zu Threads (Prozesse?) und Kommunikation

Gast #2716784
Lesenswert?

Ich glaube, es hängt nicht wirklich von der Sprache ab. Die Situation 
ist jedoch so, dass ich in Python das Web-Mini-Framework "bottle" nutze, 
aber "parallel" dazu eine (asynchrone) Verbindung zu einem anderen Gerät 
habe. Die Daten dieses Gerätes sollen dann per Web-Interface (bottle) 
abrufbar sein.
Da "bottle" die Python-Thread-Funktionen nutzt, kann ich nicht z.B. das 
Webinterface in einem Thread laufen lassen und meine Geräteschnittstelle 
in einem anderen, so dass der Datenaustausch über Variablen erfolgen 
kann.

Was sind die Möglichkeiten?
Web-Framework nutzen, dass sich innerhalb eines Threads zufrieden gibt 
(bottle besteht aus einder Datei, das ist schön; ansonsten keine große 
Abhängigkeit)?
Beide Programmteile als separate Prozesse ausführen - und dann wie 
kommunizieren (Schnittstelle oder über Datei?)?

Ein paar allgemeine Ansätze wären schön..
Admin Persönliche Seite #2716869
Lesenswert?

Hans schrieb:
> Da "bottle" die Python-Thread-Funktionen nutzt, kann ich nicht z.B. das
> Webinterface in einem Thread laufen lassen und meine Geräteschnittstelle
> in einem anderen

Wieso soll das nicht gehen?

> "parallel" dazu eine (asynchrone) Verbindung zu einem anderen Gerät

Das Ausschlaggebende ist wohl, was für eine Art von Verbindung das ist.
Gast #2717596
Lesenswert?

> Es gibt Pipes, Message Queues, Shared Memory, Remote Procedure Calls...
> such Dir was aus :)
Uiuiui!

Danke schonmal für euer Feedback.

Bevor ich mich über Prozesse informiere, Andreas scheint sich etwas 
auszukennen:

Die Verbindung ist eine 'hörende' Verbindung per UDP. Mein Skript 
sammelt input vom Gerät und soll dann bei einem HTTP Request die Daten 
aufbereitet an einen Browser ausliefern.

Warum es mit den Threads nicht geht, kann ich leider nicht genau sagen. 
Ich starte meine Klasse zur Kommunikation per "socket" in einem Thread, 
und dann den Server mit "bottle.run()". Im Prinzip klappt auch der 
Datenaustausch, d.h. der Server kann auf Daten aus 'meinem' Thread 
zugreifen.
Das Problem ist, dass 'mein' Thread doppelt gestartet wird.

Ich habe mich an einem Minimalbeispiel versucht, das darüberhinaus auch 
noch die Remote-Seite als UDP Echo emuliert - siehe Anhang.
Anstelle die Kommunikations-Klasse in einem Thread auszuführen, wird nun 
direkt im Kommunikations-Thread kommuniziert.
Das Verhalten ist aber wie im 'echten' Skript, die Threads werden 
zweifach gestartet und führen sofort zu einem Fehler, da so versucht 
wird, denselben (?) socket zu öffnen.
Die zuerst gestarteten Threads scheinen zu laufen, der Webserver ist 
jedoch nicht erreichbar..

Da ich mich mit dem Thema nicht wirklich auskenne, hoffe ich, dass es 
evtl. doch eine Möglichkeit gibt, es so zum Laufen zu bekommen.

Zielplattform ist Windows (und das in 
http://bottlepy.org/docs/dev/async.html vorgeschlagene gevent scheidet 
damit erstmal aus).
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren