Limit RAM-Auslastung in python Programm
Ich versuche, die Begrenzung der RAM-Auslastung aus einem Python-Programm um die Hälfte, damit es nicht ganz gefriert, wenn alle RAM verwendet wird, für diese ich bin mit dem folgenden code, der nicht funktioniert und mein laptop ist immer noch eingefroren:
import sys
import resource
def memory_limit():
rsrc = resource.RLIMIT_DATA
soft, hard = resource.getrlimit(rsrc)
soft /= 2
resource.setrlimit(rsrc, (soft, hard))
if __name__ == '__main__':
memory_limit() # Limitates maximun memory usage to half
try:
main()
except MemoryError:
sys.stderr.write('MAXIMUM MEMORY EXCEEDED')
sys.exit(-1)
Ich bin mit anderen Funktionen, die ich nenne, aus der main
Funktion.
Was mache ich falsch?
Vielen Dank im Voraus.
PD: ich such schon über das gefunden und den code habe ich aber es funktioniert immer noch nicht...
- Vielleicht möchten Sie
ulimit
oderprlimit
außerhalb der Python-Skript. Oder ein Speicher begrenztcgroup
und führen Sie das Skript gibt. Ich bin mir nicht sicher, versuchen, sich selbst zu begrenzen ist die beste Idee - was passiert, wenn der code, der versucht, zu überprüfen oder durchzusetzen, die Grenze muss, um Speicher in den Prozess? - Haben Sie versucht, die
soft /= 100
oder weich //= 2 ? - wenn ich, dass es sagt, verlässt zu früh @Gribouillis
- warum ist alle Ihre RAM verwendet? Sind Sie laden eine Menge von Daten in den Speicher? Haben Sie versucht, mit Generatoren?
- es ist für eine Universität die Hausaufgaben, die wir generieren müssen, ein Baum mit einer DFS straetgy das Gerät in eine unendliche Schleife, weil der task-Anweisung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, also habe ich etwas Forschung und fand eine Funktion, um den Arbeitsspeicher von Linux-Systemen hier: Ermitteln des freien RAM in Python und ich Sie ein bisschen verändert man nur den freien Speicher und die maximale Speicher zur Verfügung als Ihre Hälfte.
Code:
Die Linie zu setzen, um die Hälfte ist
resource.setrlimit(resource.RLIMIT_AS, (get_memory() * 1024 /2, hard))
woget_memory() * 1024 /2
legt es auf die Hälfte (in bytes).Hoffe, dass dies anderen helfen kann, in Zukunft mit der gleichen Sache! =)
Ich ändern, die Antwort von @Ulises CT. Weil ich denke, dass zu viel ändern ursprüngliche Funktion ist nicht so gut, also schalte ich es ein Dekorateur. Ich hoffe, es hilft.
aufgrund https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
ist es besser, zu verwenden :
den Antwort-code lieferte mir mit 8 GB zur Verfügung mem auf einer Maschine mit 1 TB RAM