Seite 1 von 1

Pythonprogramm via UDP beeienflussen.

Verfasst: Mittwoch 17. Juli 2024, 14:01
von seum90
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!

Re: Pythonprogramm via UDP beeienflussen.

Verfasst: Mittwoch 17. Juli 2024, 19:54
von Sirius3
`recvfrom` blockiert halt, bis eine Nachricht eintrifft. Willst Du non-blocking, mußt Du das explizit setzen:

Code: Alles auswählen

udp_socket.setblocking(False)
Ob das aber wirklich die Lösung ist, kann man nicht sagen. Was soll das Programm im Detail eigentlich machen? Warum UDP?

Re: Pythonprogramm via UDP beeienflussen.

Verfasst: Donnerstag 18. Juli 2024, 06:53
von seum90
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.

Re: Pythonprogramm via UDP beeienflussen.

Verfasst: Donnerstag 18. Juli 2024, 07:05
von Sirius3
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.

Re: Pythonprogramm via UDP beeienflussen.

Verfasst: Donnerstag 18. Juli 2024, 08:38
von seum90
Du meinst damit das Stichwort Async / Await? Das schaue ich mir gerade an. Damit sollte es ja auch klappen.

Re: Pythonprogramm via UDP beeienflussen.

Verfasst: Donnerstag 18. Juli 2024, 10:58
von Sirius3
In Deinem Fall wahrscheinlich eher klassische Threads.

Re: Pythonprogramm via UDP beeienflussen.

Verfasst: Donnerstag 18. Juli 2024, 14:22
von seum90
Super. Damit hat es auf anhieb geklappt.

Danke!