Ich erstelle ein Wörterbuch aus einer entfernten Datenbank als Teil meines Anwendungslaufs. Dieser Prozess ist ziemlich aufwendig, deshalb habe ich beschlossen, eine "Singleton" -Instanz dieses Wörterbuchs zu erstellen und sie so aufzurufen, wie sie in meiner Anwendung benötigt wird.Warum verhält sich ein Python-Modul wie ein Singleton?
Der Code sieht aus wie (in Dictionaries.py
):
state_code_dict = None
def get_state_code_dict():
global state_code_dict
if state_code_dict == None:
state_code_dict = generate_state_code_dict()
return state_code_dict
ich dann importieren und rufen die get_state_code_dict()
Funktion, wo nötig. Ich fügte eine print-Anweisung hinzu, um zu überprüfen, ob state_code_dict
neu initialisiert oder wiederverwendet wurde, und ich fand, dass es wiederverwendet wurde (was die Funktionalität ist, die ich möchte). Warum wird die Instanz state_code_dict
überlebt die Anwendung ausgeführt?
bearbeiten
ich importieren Sie die get_state_code_dict
Funktion in mehreren Dateien.
weil importierter Code nur beim ersten Mal ausgeführt wird? – KurzedMetal
bearbeitet, um zu verdeutlichen: Ich importiere den Code an mehreren Stellen (mehrere Dateien enthalten die 'get_state_code_dict'Funktion. –
Importieren von Code, den der Interpreter bereits geladen hat, wird diesen Code nicht standardmäßig neu laden.Es ist möglich, ein Modul absichtlich neu zu laden, aber wenn Sie dies aus irgendeinem Grund tun müssen, weil sich der eigentliche Code des Moduls während der Laufzeit geändert hat, sollten Sie wahrscheinlich ein anderes Programmier-Idiom verwenden, um das zu tun, was Sie tun möchten. –