• python reload 模块重载 文件热重载


    Python中的import语句可以导入module文件,但是import语句只是第一次导入的时候会执行module文件中的代码,然后就会把导入的模块文件存入到内存,当再次导入的时候,Python是直接从内存里面取出module文件,而不会执行module文件的内容了,而reload函数强制Python重新导入并执行module文件。

    #
    python3 from importlib import reload from demand import config # 在一个视图类中reload, 每次请求都重载配置 cfg = reload(config) # 避免模块单例 说明: reload的模块 必须是已经成功导入的模块 模块被加载到内存以后,更改文件内容,已经运行的程序不会生效的,可通过reload重新加载。 导入是一个开销很大的操作。


    Python reload 对单例对象的影响

    假如在 python 中使用了单例模式,维护了一个变量,那么在模块被 reload 后,这个变量会变吗?
    这要看单例模式的对象是在哪里创建的了吧,一般情况下单例模式所引用的对象是在被 reload 的 module 里初始化的,那 reload 会创建新的对象,而如果单例引用的是存在内存里类似 int 的基本类型对象,reload 之后依然会引用原本的对象。
    si_cls.py
    ```
    #!/bin/python
    # coding: utf-8

    ph = {'ab': 2}
    # ph = 32


    class SI:
    def __new__(cls, *args, **kwargs):
    return ph

    def id(self):
    return id(self)


    si_instance = SI()
    ```

    test.py
    ```
    #!/bin/python
    # coding: utf-8

    import si_cls
    from importlib import reload

    s1 = si_cls.SI()
    s2 = si_cls.SI()

    print(f'id(s1)={id(s1)}, id(s2)={id(s2)}, id(si_instance)={id(si_cls.si_instance)}')

    reload(si_cls)

    s1 = si_cls.SI()
    s2 = si_cls.SI()

    print(f'id(s1)={id(s1)}, id(s2)={id(s2)}, id(si_instance)={id(si_cls.si_instance)}')

     

    https://www.cnblogs.com/chaoguo1234/p/9350132.html

  • 相关阅读:
    AcWing 1018. 最低通行费
    蓝桥杯赛第10届省赛
    P5745 【深基附B例】区间最大和
    P3383 【模板】线性筛素数
    第12届蓝桥杯赛国赛 小蓝买瓜子
    P4715 【深基16.例1】淘汰赛
    AcWing 1015. 摘花生
    第12届蓝桥杯赛省赛 种菜的最大价值
    linq to sql初步
    汇编语言学习笔记接收鼠标消息
  • 原文地址:https://www.cnblogs.com/yum777/p/14917633.html
Copyright © 2020-2023  润新知