Seite 1 von 1

Prozesse durch Schleifenpausen resourcenschonend?

Verfasst: Dienstag 5. August 2014, 16:59
von Papp Nase
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.

Re: Prozesse durch Schleifenpausen resourcenschonend?

Verfasst: Dienstag 5. August 2014, 17:02
von BlackJack
@Papp Nase: Während ein Thread per `sleep()` schläft, sollte er keine Ressourcen verbrauchen.

Re: Prozesse durch Schleifenpausen resourcenschonend?

Verfasst: Dienstag 5. August 2014, 17:21
von Sirius3
@Papp Nase: wer setzt denn den Status? Um Threads zu synchronisieren gibt es Mechanismen, z.B. hier threading.Event.

Re: Prozesse durch Schleifenpausen resourcenschonend?

Verfasst: Dienstag 5. August 2014, 19:49
von Papp Nase
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.

Re: Prozesse durch Schleifenpausen resourcenschonend?

Verfasst: Dienstag 5. August 2014, 20:11
von pillmuncher
"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.

Re: Prozesse durch Schleifenpausen resourcenschonend?

Verfasst: Dienstag 5. August 2014, 20:14
von EyDu
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.

Re: Prozesse durch Schleifenpausen resourcenschonend?

Verfasst: Dienstag 5. August 2014, 22:19
von pillmuncher
Weil mir das gerade untergekommen ist: Why is Concurrent Programming hard?