2016-05-17 10 views
1

Wie geht Python mit der Speicherzuordnung um? Gibt es etwas Relevantes über die Speicherzuweisung, über das ich als Entwickler beim Erstellen einer großen Anwendung mit Python nachdenken müsste, oder sollte ich Python vertrauen, um dies optimal zu verwalten?Wie geht Python mit der Speicherzuordnung um?

+1

[Lesen Sie die Dokumente] (https://docs.python.org/3/c-api/memory.html) – CoryKramer

+0

Die Dokumente sagen, dass der "Python Memory Manager" verwaltet den Speicher, aber die nicht beantworten Frage (oder zumindest nicht in diesem Abschnitt), ob es etwas gibt, über das ein Entwickler nachdenken muss. Ich denke, die wichtigsten Dinge werden darin bestehen, sicherzustellen, dass überflüssige Objekte in der Lage sind, Müll zu sammeln usw. Ich werde die Frage jemandem beantworten, der mehr darüber weiß als ich. – neil

+0

Neil hat Recht, ich hatte die Dokumente gelesen, aber ich war mir nicht sicher, ob ich selbst etwas tun sollte. –

Antwort

3

Python behandelt die Zuweisung für Sie, aber es gibt Umstände, in denen Sie explizit die Zuweisung aufheben sollten, um Python oder das weitere System daran zu hindern, Speicher zu verarbeiten. del x entfernt den Namen x von allen Daten, an die es angehängt ist, und wenn die Datenreferenzzahl Null wird, dann sind diese Daten für Garbage Collection geeignet, wenn der Garbage Collector als nächstes aufgerufen wird. Was sicher passiert ist, bevor das Programm fehlschlägt, weil es keinen Speicher mehr hat.

Sie können den Garbage Collector explizit aufrufen (Standard Python-Modul gc). gc.collect() sagt es eine vollständige Sammlung sofort zu tun, wenn Sie nicht möchten, dass es zufällig zu einem späteren Zeitpunkt passiert. Es gibt eine Reihe anderer Dinge, die Sie tun können, um das Verhalten auf die Bedürfnisse Ihres Programms abzustimmen. Sie können sie beispielsweise für einen Codeabschnitt deaktivieren und erneut aktivieren, dessen Echtzeitverhalten wichtig ist und dessen Abwanderung von temporären Objekten gering ist. Weitere Informationen finden Sie unter https://docs.python.org/3/library/gc.html.

Müllsammlung eines Objekts kann sein, wenn eine wichtige Säuberung von externen Einheiten stattfindet. Das einfachste Beispiel ist f=open("some.file" ,"w"). Wenn Sie with nicht verwenden oder die Datei f.close() aufrufen, bleibt die Datei bis zum Ende des Programms geöffnet, oder bis f als Garbage-Collected erfasst wird.

Müssen Sie das wissen? Oft nicht auf einem Single-User-System mit GBytes, wie der durchschnittliche Desktop-PC. Wahrscheinlich ja, wenn Sie Python-Code schreiben, um als ein Element einer Sammlung von Prozessen auf einem hart gepressten Server ausgeführt zu werden. Der Speicher, den Sie nicht explizit freigeben, kann Speicher sein, den ein anderer Prozess benötigt.

+0

Vielen Dank für diese Antwort, es war genau das, was ich wollte. –

Verwandte Themen