Ja toll mit import. Mit einem Modul, das dann so aussieht:
Code: Alles auswählen
Außerdem hat man das Problem der Memory Leaks mit so einem Modul nicht gelöst.
Ja toll mit import. Mit einem Modul, das dann so aussieht:
Code: Alles auswählen
Hab es mal ein bisschen geändert und bekomme das raus:DasIch hat geschrieben:eval() und exec leaken sehr leicht Referenzen.Dadurch lassen sich sehr leicht Memory Leaks produzierenCode: Alles auswählen
>>> eval(compile('foo = 1', '<string>', 'exec')) >>> foo 1
Wo wir übrigens bei Memory Leaks sind, folgendes als "foo.py" speichern:Code: Alles auswählen
class Foo(object): def __del__(self): print 'Collected' f = Foo()
So schnell haben wir ein Memory Leak mit exec was wir ohne gar nicht hätten.Code: Alles auswählen
λ python foo.py Collected λ python Python 2.7.10 (default, Jun 3 2015, 19:28:03) [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.49)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import gc >>> for _ in range(10): ... execfile('foo.py', {}) ... print gc.collect(), len(gc.garbage) ... 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 9 10
Code: Alles auswählen
>>> import collect
>>> collect.start()
Collected
8 0
Collected
8 0
Collected
8 0
Collected
8 0
Collected
8 0
Collected
8 0
Collected
8 0
Collected
8 0
Collected
8 0
Collected
8 0
Code: Alles auswählen
import gc
def start():
a = {}
for _ in range(10):
execfile('foo.py',a)
a.clear()
a = {}
print gc.collect(), len(gc.garbage)
Du siehst nicht ein das ``del`` keine Lösung für das eingebildete Problem ist, welches keiner Lösung bedarf. Immer noch nicht. Ich denke man sollte jedes Thema in dem Du wieder mit diesem Unsinn anfängst schliessen. Das bringt nichts, ausser Verwirrung bei Leuten die Dein absolutes nicht-verstehen(-wollen) für bare Münze nehmen und Deine Lalaland-Ansichten von ``del`` und Dokumentationen am Ende noch glauben.Alfons Mittelmeyer hat geschrieben:Und einsichtig bin ich auch nicht, ich habe nur die beste Lösung gefunden.