Wie man die Speichernutzung innerhalb eines Python-Prozesses einschränkt

Ich führe Python 2.7 auf einem Linux-Computer mit 16 GB RAM und 64-Bit-Betriebssystem aus. 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.

Während ich den Speicher einschränken kann, rufe ich auf:

ulimit -v 12000000

evor ich das Skript ausführe, möchte ich in meiner Shell eine Einschränkungsoption in das Skript selbst einfügen. Überall habe ich geschaut, dasresourceas @ -Modul hat die gleiche Leistung wie das @ -Moduulimit. Aber anrufen:

import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))

am Anfang meines Skripts macht absolut nichts. Selbst wenn der Wert auf 12000 gesetzt wurde, konnte der Prozess nicht zum Absturz gebracht werden. Ich habe das gleiche mit @ versucRLIMIT_STACK, auch mit dem gleichen Ergebnis. Seltsamerweise anrufend:

import subprocess
subprocess.call('ulimit -v 12000', shell=True)

tut auch nichts.

Was mache ich falsch? Ich konnte online keine tatsächlichen Verwendungsbeispiele finden.

edit: Für alle, die neugierig sind, mitsubprocess.call funktioniert nicht, weil es einen (überraschenden, überraschenden!) neuen Prozess erzeugt, der unabhängig von dem ist, in dem das aktuelle Python-Programm ausgeführt wird.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage