Why does a python module act like a singleton?

前端 未结 2 955
说谎
说谎 2020-12-03 08:21

I create a dictionary from a remote database as part of my application run. This process is pretty I/O heavy, so I\'ve decided to create a \"singleton\" instance of this di

相关标签:
2条回答
  • 2020-12-03 09:13

    This is the Python Language Reference's description of how importing a module works:

    (1) find a module, and initialize it if necessary; (2) define a name or names in the local namespace

    (Emphasis added.) Here, initializing a module means executing its code. This execution is only performed if necessary, i.e. if the module was not previously imported in the current process. Since Python modules are first-class runtime objects, they effectively become singletons, initialized at the time of first import.

    Note that this means that there's no need for a get_state_dict_code function; just initialize state_code_dict at top-level:

    state_code_dict = generate_state_code_dict()
    

    For a more in-depth explanation, see this talk by Thomas Wouters, esp. the first part — around 04:20 — where he discusses the "everything is runtime" principle.

    0 讨论(0)
  • 2020-12-03 09:16

    I voted larsmans answer, i just wanted to add an example.

    hello.py:

    hi = 'hello'
    
    print(hi)
    
    def print_hi():
        print(hi)
    

    ipython session:

    In [1]: from hello import print_hi
    hello
    
    In [2]: print_hi()
    hello
    
    In [3]: from hello import print_hi
    
    In [4]: import hello
    
    In [5]: hello.print_hi()
    hello
    


    Look that the imports at lines 3 and 4 don't output "hello" as the import in line 1 did, that means the code isn't re-executed.

    0 讨论(0)
提交回复
热议问题