Speicher/CPU-Limit definieren

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
grim
User
Beiträge: 1
Registriert: Freitag 27. April 2007, 10:59

Freitag 27. April 2007, 11:09

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 27. April 2007, 11:23

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
:-)
Zuletzt geändert von gerold am Freitag 27. April 2007, 11:49, insgesamt 2-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Freitag 27. April 2007, 11:40

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...
Zuletzt geändert von Rebecca am Freitag 27. April 2007, 11:46, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 27. April 2007, 11:46

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Freitag 27. April 2007, 14:04

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.
Antworten