Ich habe Python 2.7 auf einem Linux-Rechner mit 16 GB RAM und 64-Bit-Betriebssystem. Ein Python-Skript, das ich geschrieben habe, kann zu viele Daten in den Speicher laden, was die Maschine so verlangsamt, dass ich den Prozess nicht mehr beenden kann.Speicherverbrauch begrenzen?
Während ich Speicher durch den Aufruf begrenzen:
ulimit -v 12000000
in meiner Schale, bevor Sie das Skript ausgeführt wird, würde Ich mag eine Begrenzung Option im Skript selbst aufzunehmen. Überall, wo ich hinsah, wird das Modul resource
mit der gleichen Leistung wie ulimit
zitiert. Aber rufen:
import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))
am Anfang meines Skripts tut absolut nichts. Selbst wenn der Wert so niedrig wie 12000 gesetzt wurde, stürzte der Prozess nie ab. Ich habe das gleiche mit RLIMIT_STACK
versucht, auch mit dem gleichen Ergebnis. Seltsamerweise ruft:
import subprocess
subprocess.call('ulimit -v 12000', shell=True)
tut auch nichts.
Was mache ich falsch? Ich konnte keine tatsächlichen Anwendungsbeispiele online finden.
Gibt es einen Platz, um das Programm speichereffizienter zu machen? – TigerhawkT3
Es gibt, aber das wird eine Weile dauern. Im Moment muss ich es testen und sicherstellen, dass es den Computer nicht herunterfährt. Und eine Ausfallsicherung für den Speicher wird auch später nützlich sein. – Arne
Da es in Python 2.7 ist, wie wäre es mit Python 3 und einem 2-zu-3-Konverter in Ihrem Programm? Python 3 hat einige Leistungsverbesserungen gegenüber Python 2, von denen einige speicherbezogen sind. – TigerhawkT3