Prozesse durch Schleifenpausen resourcenschonend?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

Hallo,

ich habe mir etwas ausgedacht, zu dem ich gerne etwas wissen würde - also ein abstraktes Modellbeispiel, was ohne großen Code auskommen soll.

Ich schreibe mir eine Klasse mit einer run-Funktion, die ich mit dem Modul threading benutzen kann. Diese Run-Funktion könnte z.B. den Status von irgendetwas abfragen.

while Status != True:
...

Diese while-Schleife würde bis zum Erreichen vom Abbruchkriterium sehr oft ablaufen. Lasse ich jetzt diese while-Schleife z.B. 100mal parallel laufen, dann hat der Prozessor wahrscheinlich ne Menge zu tun. Angenommen, der aktuelle Prozess soll garnicht so oft ablaufen (Polling), sondern nur hin- und wieder mal abgefragt werden - ich würde die while-Schleife einfach durch ein delay pausieren lassen.

while Status != True:
...
time.sleep(0.01)

Was macht der Pythoninterpreter in dieser Zeit? Verbraucht das Warten mittels der Sleep-Funktion auch viel an Ressourcen oder hat dadurch das Betriebssystem die Möglichkeit, inzwischen andere Dinge zu erledigen, die dann flüssiger laufen würden? Es gibt die eine oder andere Programmiersprache, da kann ich dies durch so eine Warten-Funktion erreichen, ich bin mir aber nicht sicher, ob das bei Python auch der Fall ist, darum stelle ich diese Frage hier in dieses Forum mit der Hoffnung, dass ihr mir weiterhelfen könnt.
BlackJack

@Papp Nase: Während ein Thread per `sleep()` schläft, sollte er keine Ressourcen verbrauchen.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Papp Nase: wer setzt denn den Status? Um Threads zu synchronisieren gibt es Mechanismen, z.B. hier threading.Event.
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

Sirius3 hat geschrieben:@Papp Nase: wer setzt denn den Status? Um Threads zu synchronisieren gibt es Mechanismen, z.B. hier threading.Event.
Danke für die Antwort. Synchronisation von Threads war eigentlich nicht Bestandteil meiner Frage. Aber sie kommt gewiss irgendwann später, wenn ich etwas fitter bin und dann werde ich mich sicherlich an Deinen Hinweis mit den Threadevents erinnern, vielen Dank schon mal im Voraus dafuer.
Benutzeravatar
pillmuncher
User
Beiträge: 1532
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

"Bremsen war eigentlich nicht Bestandteil meiner Frage. Aber sie kommt gewiss irgendwann später, wenn ich etwas mehr Erfahrung im Autofahren habe."

Das Problem beim Multithreading besteht darin, gemeinsam genutzte Ressourcen bei mehreren nebenläufigen Threads so zu verwenden, dass das Programm jederzeit in einem konsistenten Zustand ist. Dazu braucht man irgendwelche Mechanismen, wie zB. Mutexe, Semaphoren, synchrone Queues, Events, und so weiter. Das Starten eines Threads ist so schwierig wie das Starten eines Autos. Das, was danach kommt dagegen...

Nein, ich kann es dir hier leider nicht erklären, weil es zu umfangreich wäre. ich kann aber ein hervorragendes Buch zum Einstieg in nebenläufige Programmierung empfehlen, "Concurrent Programming in Java" von Doug Lea. Es ist recht gut auf Python übertragbar, weil das threading-Modul den Java-Multithreading-Mechanismen nachempfunden wurde. Und das bisschen Java, das man zum Verständnis braucht, ist auch gleich gelernt.
In specifications, Murphy's Law supersedes Ohm's.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du brauchst Events, oder etwas komplexeres, doch wahrscheinlich schon jetzt. Dein Thread wird ja wahrscheinlich nicht einfach so im leeren Raum vor sich hinbrüten und die Ergebnisse für sich behalten. Irgendwann wird er wohl zwangsweise mit dem Hauptthread in Verbindung treten müssen und spätestens dann brauchst du Events oder Queues.
Das Leben ist wie ein Tennisball.
Benutzeravatar
pillmuncher
User
Beiträge: 1532
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Weil mir das gerade untergekommen ist: Why is Concurrent Programming hard?
In specifications, Murphy's Law supersedes Ohm's.
Antworten