Seite 1 von 1

Speicher/CPU-Limit definieren

Verfasst: Freitag 27. April 2007, 11:09
von grim
Hallo,
ich habe ein kleines Programm, dass aufgabenbedingt viel Speicher und CPU-Ressourcen benötigt. Im Moment zieht sich das Skript alle freien Ressourcen und zwingt das System dadurch in die Knie. Mich würde nun interessieren ob und wie es möglich ist, Obergrenzen für Speicher und CPU zu definieren. Erschwärend kommt hinzu, dass das Skript auf einem Win-System mittels Cygwin läuft. Version ist python 2.4.

Vielen Dank im voraus, grim

Re: Speicher/CPU-Limit definieren

Verfasst: Freitag 27. April 2007, 11:23
von gerold
grim hat geschrieben:Mich würde nun interessieren ob und wie es möglich ist, Obergrenzen für Speicher und CPU zu definieren.
Hallo grim!

Willkommen im Python-Forum!

Den Speicherverbrauch kannst du, meines Wissens, nicht begrenzen. Wenn dein Programm nicht genügend Speicher zum Arbeiten bekommt, dann wird es nicht mehr funktionieren.

Die CPU-Auslastung kannst du auch nicht in Prozent regeln oder sonstwie auf einen Wert begrenzen.

Du kannst aber dein Programm so schreiben, dass es immer mal wieder eine Pause macht und damit den anderen Prozessen mehr Zeit lässt, sich wieder zu erholen.

Dieses Programm wird den Computer (eine CPU) voll auslasten:

Code: Alles auswählen

for i in xrange(10000):
    x = 1
Dieses Programm lässt anderen Programmen mehr Zeit:

Code: Alles auswählen

import time
for i in xrange(10000):
    x = 1
    time.sleep(0.001)
Wenn du nicht so viel Zeit zum Ausrasten geben willst, dann könntest du so verfahren:

Code: Alles auswählen

import time
for i in xrange(10000):
    x = 1
    if i % 10 == 0:
        time.sleep(0.001)
So wird nur alle zehn Durchläufe eine Pause gemacht. Der Aufruf von ``time.sleep`` kostet natürlich Zeit und Performance. Deshalb würde ich die letzte Variante vorziehen. Lieber längere Pausen und weniger oft ``time.sleep`` aufrufen.

mfg
Gerold
:-)

Verfasst: Freitag 27. April 2007, 11:40
von Rebecca
Die CPU-Nuztung deines Prozesses kannst du unter *nix auch mit dem nice-Wert steuern:

Code: Alles auswählen

nice -n 19 meinprogramm
verlangt am wenigsten gierig nach CPU. Es wird aber trozdem die CPU voll ausgelastet, nur werden halt andere Prozesse eher vorgelassen.

Kritischer ist aber eher der Arbeitsspeicher, wenn das System anfaengt, stark zu swappen. Wenn du keine Moeglickeit hast, das Skript resourcenschonender zu programmieren, faellt mir nur ein, das Programm in einer virtuellen Maschine/einem Emulator laufen zu lassen. Ist aber wohll mit Kanonen auf Spatzen geschossen... :roll: Und inwieweit das dem restlichen System hilft??? Wenn die virtuelle Maschine swappt, bleibt der Festplattenzugriff fuer das Hostsystem ja trotzdem langsam. Nur dass das Hostsystem eventuell noch nicht swappen muss...

Verfasst: Freitag 27. April 2007, 11:46
von gerold
Rebecca hat geschrieben:Die CPU-Nuztung deines Prozesses kannst du unter *nix auch mit dem nice-Wert steuern:
Hallo grim!

Da fällt mir ein, dass du unter Windows mit ``START /LOW meinprogramm.exe`` die Prozesspriorität verändern kannst. Allerdings hilft das bei meinem täglichen Backup nicht besonders viel. Der IO wird trotzdem voll belastet. Da helfen meine zwei Prozessoren auch nichts mehr. :?

mfg
Gerold
:-)

Verfasst: Freitag 27. April 2007, 14:04
von Sr4l
Prozesspri zu setzen bringt schon was wenn man z.B Film guckt und gleichzeitig ein Spielspielt ( :-D mach ich manchmal ) dann setze ich Film auf High damit der nicht hängt.

Also jetzt nicht mehr weil ich seit Janurar Ubuntu User bin. Und dank Nvidia, Wine und Ubuntu7.04 laufen auch alle Games ;-) perfekt. bei 6.10 hatte ich noch ein laggen in den Games.