Forum: PC-Programmierung Wie funktioniert ein einziger Prozess Ablauf in Python?


von Bernd (Gast)


Lesenswert?

Hallo,

könnte mir jemand sagen wie python eine sogenannte Dauerschleife 
durchläuft mit While: True und welche diese unterbricht?

Ich sende mit einem Serial Port angeschlossen über USB Kabel ein Analog 
Signal von einem Arduino zu einem Rasperry (Temperatur Messer).
Dies wird alle 10 Sekunden gesendet.

Auf dem rasperry hab ich im gleichen loop wie serial input read einen 
Taster in der Dauerschleife.
So typisch erste Gehversuche mit einem Arduino.

Wenn nun der serial input gerade ungünstig liegt bis 10 Sekunden vorüber 
sind, muss ich auch den Taster ewig drücken, bis er mal funktioniert.
Oder er sendet sein Signal bis zu 10 Sekunden durchgehend.

In einer normalen Schleife ohne den serial input, funktioniert der 
Taster immer sofort.

Ich dachte mir immer, nur ein sleep kann python unterbrechen.

Wartet python hier so lange, bis serial abgearbeitet ist und wie kann 
man das überspringen?

In einem try - except steht es schon.

Wäre dankbar für ein Schlagwort unter das man dabei suchen soll.

von Norbert (Gast)


Lesenswert?

Blocking / Non-Blocking

>>Wäre dankbar für ein Schlagwort

100% übererfüllt ;-)

von Bernd (Gast)


Lesenswert?

Norbert schrieb:
> Blocking / Non-Blocking
>
>>>Wäre dankbar für ein Schlagwort
>
> 100% übererfüllt ;-)

Omg, danke!

von MaWin (Gast)


Lesenswert?

Bitte Sourcecode posten.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Unter Windows mache ich sowas mit einem Timer, der alle
x Sekunden in eine Subroutine springt und die Schnittstelle
ausliest.
Gibt es sowas bei Python nicht ?

von Dirk (Gast)


Lesenswert?

Eventuell ist die unbekannte Serial Port Funktion blockend, eventuell 
könnte für dich pyside6 interessant sein, aber am besten postest Du 
deinen Code mal.

von Imonbln (Gast)


Lesenswert?

Bernd schrieb:
> In einer normalen Schleife ohne den serial input, funktioniert der
> Taster immer sofort.
>
> Ich dachte mir immer, nur ein sleep kann python unterbrechen.

Nein je nach Implementierung kann der Serial Read blocking sein. Wenn du 
PySerial verwendet kannst du im Konstruktor ein timeout=0 definieren, 
dann kommt der read sofort zurück, wenn keine Daten da sind und dein 
Programm sollte schneller auf den Taster reagieren.

Alternativ könntest du dein Python Programm auch mit asyncio parallel 
schreiben, dann hättest du zwei unabhängige Routinen, eine für den 
Serial Port und eine für den Taster, hast dann aber typischen Probleme 
einer asynchronen Programmierung am Hals.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.