Seite 1 von 1

90-100% CPU Last

Verfasst: Freitag 26. Januar 2007, 22:36
von name
Wenn ich folgendes Programm ausfuehre sehe ich diese nette Ausgabe bei "top":
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6962 name 15 0 47608 10m 5968 S 90 0.5 427:57.84 python
Das 90% CPU schwankt, aber bleibt andauerd eindeutig zu hoch, das seltsame ist das es mein System nicht richtig beeintraechtigt. Ich verwende Ubuntu Edgy Eft auf einem Intel Pentium 4 mit 3 Ghz.
Wie kann ich das verhindern?

Danke im Vorraus!

Verfasst: Donnerstag 1. Februar 2007, 14:43
von blumi
Also ich kann mir jetzt Dein Programm nicht ansehen (der Link bringt mir einen HTTP Error 500 ?!), aber ich habe auch einen solchen Effekt bemerkt, wenn ich in einer Schleife auf einen Event warte (readkey() ließt ein Byte aus einem Puffer eines externen Keypads aus und liefert "", wenn keine Taste gedrückt wurde):

Code: Alles auswählen

tKey = ""
while (tKey == ""):
    tKey == readkey()
    if (tKey == "X"):
        break
    time.sleep(0.01)
Wenn ich die sleep()-Anweisung weg lasse, geht die Prozessorlast auf 100%, während auf einen Tastendruck gewartet wird. Als würde der Interpreter heiß laufen, wenn eine Schleife zu schnell wiederholt wird.

Blumi

Verfasst: Donnerstag 1. Februar 2007, 18:06
von Leonidas
blumi hat geschrieben:Als würde der Interpreter heiß laufen, wenn eine Schleife zu schnell wiederholt wird.
Nicht der Interpreter läuft heiß, sondern die CPU.

Verfasst: Donnerstag 1. Februar 2007, 18:23
von HWK
Das habe ich in einem Tkinter-Programm auch schon erlebt in einer Schleife, die Eingaben zeichenweise vom Netzwerk holt. Ich wurde zuerst aufmerksam, weil der CPU-Lüfter beim Aufruf des Scripts regelmäßig startete. Gelöst habe ich es auch mit einer sleep()-Anweisung.
MfG
HWK

Verfasst: Freitag 2. Februar 2007, 14:11
von gorba
hmm, dass heisst doch eigentlich, dass der Prozess den CPU blockiert. Das sollte eigentlich nicht passieren, da der CPU ein sheduling modell hat.

Es is allerdings sicher sinnvoll, solche Prozesse Blocking-Sleep zu stellen, die dann der den CPU wider "geweckt" werden, da so auch andere Prozesse rechenzeit bekommen.