Begrenzung CPU-Nutzung

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
mmf
User
Beiträge: 2
Registriert: Freitag 27. Mai 2005, 16:54

Hallo!

Ich habe ein ziemlich rechenintensives Programm geschrieben, dass die CPU ziemlich schnell an die Wand fährt.

Meine Frage:
Wie kann ich sicherstellen, dass ein Python-Prozess nicht mehr als 35% der gesamten CPU-Ressourcen verbraucht?

Ich habe da schon mit dem resource-Modul herumexperimentiert, aber da wird der Prozess immer getötet wenn das Limit erreicht wird - ich will aber den Prozess nicht beenden lassen, ich will nur, dass er einfach nur maximal 35% der CPU benutzt.

Oder ist das in Python nicht möglich???

Grüße,
Markus
BlackJack

Schau Dir mal `os.nice()` an. Man kann zwar keine Prozentwerte angeben, aber die Priorität des laufenden Prozesses runtersetzen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Vielleicht auch mit sleep() arbeiten?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi

Und was soll das sleep() bringen? Im besten Fall senkt es den Mittelwert der CPU-Nutzung, aber die Spitzen bleiben dieselben, die absolute Laufzeit des Programms wird aber heraufgesetzt. Außerdem würde ich auch nur ungern rechenintensiven Code zerstückeln - da ist man doch froh, wenn man den Algorithmus versteht und auch drei Monate nach der Implementierung noch nachvollziehen kann.
Und was niceness angeht, so ist das u. U. eine Lösung, aber bei zu vielen Threads geht der Rechner bei den meisten Betriebssystemen trotzdem in die Knie.

Ich habe folgende Fragen an mmf:
- Wie sieht Dein Kontrollskript aus, bei dem Du das resource-Modul eingebaut hast? Was passiert bei Abbruch des Prozesses? Gibt es ein Traceback? (Normalerweise töted Python keine Prozesse, es sei denn man sagt es Python explizit.)
- Mit welchem Betriebssystem, welcher Umgebung arbeitest Du?
- Benutzt Dein rechenintensiver Teil versch. Threads für versch. Teilaufgaben? In dem Fall könntest Du eine Kontrolle mit os.getloadavg() einbauen. In etwa: "Wenn keine Resourcen genutzt werden, einen neuen Thread starten."
- Was genau berechnest Du da? Was braucht die Resourcen in Deiner Rechnung? Normalerweise braucht jeder Prozess so viel wie er kriegen kann, aber u. U. kann man ja die Rechenzeit abkürzen.

Na ja, Du kannst ja selber sehen, ob eine Frage wichtig ist oder nicht - oder ob Du vielleicht mit BlackJacks Vorschlag schon eine Lösung hast.

Gruß,
Christian
Antworten