Wie funktioniert ein einziger Prozess Ablauf in Python?

Gast #6843759
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.
Gast #6848356
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.