Hallo Zusammen,
als Anfänger komme ich mal wieder nicht weiter. Ich habe ein Programm geschrieben, dass via SPI von einem Sensor Daten bekommt. Das Funktioniert auch wunderbar. In meinem Programm habe ich jetzt auch einen UDP Client mit sockets eingebaut. Der empfängt auch wunderbar meine Befehle und verarbeitet diese weiter.
Das Abfragen des Sensors und der UDP Client erfolgen jeweils in einer eigenen Funktion.
In einer Dauerschleife frage ich dann über die Funktion den Sensor ab und gebe diesen aus. Direkt als nächstet schaue ich ob am UDP Port eine Nachricht für mich ist.
Ist hier aber keine Nachricht, bleibt mein Programm hier stehen und wartet solange bis eine Nachricht da ist. Sobald dann eine Nachricht kommt, läuft das Programm wieder durch. Ich versuche heute schon den ganzen Tag es zu schaffen das Programm weiterlaufen zu lassen, wenn an sock.recvfrom() keine nachricht anliegt.
if not data:
if data != b'':
und try:
haben mir leider noch nicht zum Ziel gebracht.
Ich will eigentlich vermeiden, dass es 2 separate Programme werden die dann via FIFO´s bzw named pipe kommunizieren.
Vielen Dank für eure Hilfe!
Pythonprogramm via UDP beeienflussen.
`recvfrom` blockiert halt, bis eine Nachricht eintrifft. Willst Du non-blocking, mußt Du das explizit setzen:
Ob das aber wirklich die Lösung ist, kann man nicht sagen. Was soll das Programm im Detail eigentlich machen? Warum UDP?
Code: Alles auswählen
udp_socket.setblocking(False)
Danke für die schnelle Antwort.
Dann werde ich es wohl mit einem 2. Programm und den pipes machen.
Das Programm soll Messerwerte auslesen und muss diese in eine Textdatei schreiben. Ob geschrieben wird oder nicht bzw. zuvor muss noch ein Zeitstempel gesetzt werden, kommt extern via UDP / TCP. Das geht leider nicht anders.
Dann werde ich es wohl mit einem 2. Programm und den pipes machen.
Das Programm soll Messerwerte auslesen und muss diese in eine Textdatei schreiben. Ob geschrieben wird oder nicht bzw. zuvor muss noch ein Zeitstempel gesetzt werden, kommt extern via UDP / TCP. Das geht leider nicht anders.
Wie kommst Du jetzt drauf, dass Du zwei Programme brauchst???
Wenn Du einen Zeitserver abfragst, dann mußt Du das ja nur einmal machen, und nicht ständig.
Zudem solltest Du Dein Programm eh asyncron aufbauen. Sowohl das Lesen der Sensordaten als auch das Schreiben in eine Textdatei können blockieren. Und man möchte ja nicht, dass nur weil das Schreiben etwas länger dauert, die Sensorwerte nicht mehr gelesen werden können.
Wenn Du einen Zeitserver abfragst, dann mußt Du das ja nur einmal machen, und nicht ständig.
Zudem solltest Du Dein Programm eh asyncron aufbauen. Sowohl das Lesen der Sensordaten als auch das Schreiben in eine Textdatei können blockieren. Und man möchte ja nicht, dass nur weil das Schreiben etwas länger dauert, die Sensorwerte nicht mehr gelesen werden können.