Lazy-Reload

Der faule Python-Reloader
Jetzt downloaden

Lazy-Reload Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • MIT/X Consortium Lic...
  • Name des Herausgebers:
  • Dave Abrahams
  • Website des Verlags:
  • http://boostpro.com

Lazy-Reload Stichworte


Lazy-Reload Beschreibung

Der faule Python-Reloader Lazy-Reload ist das Python-Modul, das einen Weg bereitstellt, um zu steuern, was beim Nachladen passiert. Module werden in derselben Reihenfolge neu geladen, wenn sie zum ersten Mal geladen wurden, und aus denselben Gründen, um einige der Unvorhersehbarkeit mit kreisförmigen Modul-Referenzen zu vermeiden foo) von foo.bar Import baz # <= foo, bar, und baz Reloaded HeremotivationDie Probleme mit Reloading-Modulen in Python sind Legion und bekannt. Während der gewöhnlichen Ausführung enden die Verweise auf Objekte in den Modulen und zu den Modulen selbst auf dem Objektgraphen auf Art und Weise, die schwer zu verwalten und schwer vorherzusagen zu verteilt sind. Infolgedessen ist es sehr üblich, einen alten Code zu haben, der lange nach dem Reload hängt, wodurch möglicherweise die Dinge referenziert werden, die Sie nachgeladen haben. Dies ist nicht notwendigerweise Python-Fehler: Es ist nur ein hartes Problem, um gut zu lösen. Er resultieren die meisten Anwendungen, die ihren Code dynamisch aktualisieren müssen, um einen neuen Python-Prozess für diesen Zweck zu starten. Ich empfehle Ihnen dringend, das zu tun, wenn es eine Option für Sie ist; Sie sparen auf lange Sicht viele Debugging-Kopfschmerzen. Für den Rest von uns gibt es Lazy_Reload.Was Python's __builtin __. Load Doesthe Reload (), die von Python geliefert wird, ist sehr einfach: Es führt dazu, dass die Quelldatei des Moduls im Rahmen des vorhandenen Modulobjekts interpretiert wird. Alle Attribute des Moduls, die nicht von dieser Interpretation überschrieben werden, bleiben an Ort und Stelle. So kann beispielsweise ein Modul erkennen, dass er wie folgt neu geladen wird: Wenn 'falls_loaded' in Globals (): drucken 'drucken' ich bin Reloaded'already_loaded = Truealso, macht Python keinen Versuch, Referenzen auf dieses Modul an anderer Stelle in Ihrem Programm zu aktualisieren. Da sich die Identität des Modulobjekts nicht ändert, funktionieren direkte Modulreferenzen. Alle vorhandenen Verweise auf Funktionen oder Klassen, die in diesem Modul definiert sind, weisen jedoch immer noch auf die alten Definitionen hin. Objekte, die erstellt werden, bevor der Reload immer noch auf veraltete Klassen über ihr __CLASS__-Attribut verweist, und örtliche Namen, die in andere Module importiert wurden, die in anderen Modulen importiert wurden, die immer noch ihre alten Definitionen referenzieren Alle Submodule von SYS.Modulen, und arrangiert, dass das nächste Mal, wenn jeder von ihnen importiert wird, neu geladen werden. Bevor ein Modul automatisch neu geladen wird, werden zunächst beliebig viele Attribute gelöscht, um zu verhindern, dass einige Importformen von der Auswahl derjenigen abgeholt werden, anstatt das Submodul zu submodieren. Was lazy_Reload nicht tut Modul von anderen Modulen. Insbesondere hat dies geladen: # bar.py import foo def (): return foo.x- Die Referenz auf foo ist bereits in der bar vorhanden Ursache Foo, um neu geladen zu werden, obwohl es dort verwendet wird. Somit sind Sie mit Lazy_Unload auf Top-Level-Modulen sicherste, die nicht anderen Teilen Ihres Programms nach Name bekannt sind. Denken Sie daran, dass der Reload-Vorgang faul ist, und nur passiert, wenn das Modul importiert wird. Wenn das Programm Referenzen auf Funktionen und Klassen hält, erwarten Sie nicht, dass sie nicht abgesammelt werden. (Achten Sie auf Backtraces; Informationen aus der letzten Ausnahme, die erhoben ist, ist ein subtiles, was die Dinge länger lebendig aufbewahrt werden können, als Sie möchten) .- er faltet Ihre Wäsche nicht oder waschen Sie Ihre Katzen nicht. Wenn Sie diese Aktivitäten nicht selbst genießen, berücksichtigen Sie die vielen erschwinglichen Alternativen zu Haustieren und Kleidern. Anforderungen: · Python


Lazy-Reload Zugehörige Software