python 如何重载模块,用一个简单的例子来解释

        flask 在调试时,如果我们对文件有所修改,服务器就会重新启动,而无需我们停下服务器再重新启动,这里面就暗藏了一个重载的机制。

        下面用一个简单的例子,来解释python如何重载一个模块

        新建一个名为reloadsetting.py 的文件,内容很简单:

       

#coding=utf-8
'''
Created on 2016-3-25

@author: Administrator
'''

msg = 'change it '
        

          再新建一个名称为reloaddemo.py的文件,内容为:

#coding=utf-8
'''
Created on 2016-3-25

@author: Administrator
'''
import threading
import reloadsetting
import sys,os, time


def printworker():
    while True:
        time.sleep(1)
        print reloadsetting.msg
    
def auto_reload():
    while True:
        
        mods = ["reloadsetting"] # the need reload modules
     
        for mod in mods:
            try:
                module = sys.modules[mod]
            except:
                continue
            
            #获得文件的名字
            filename = module.__file__
            
            #pyc结尾的文件,只在第一次载入时生成,因此,即便我们对文件进行了修改,运行中,它的修改时间是不会变的
            if filename.endswith(".pyc"):
                filename = filename.replace(".pyc", ".py")
            #获得文件上一次修改的时间
            mod_time = os.path.getmtime(filename)
            #module.__dict__ 里保存了模块的信息,具体参考globals函数
            if not "loadtime" in module.__dict__:
                module.loadtime = 0 # first load's time  1*
            try:
                #如果修改时间大于上一次载入的时间,那么就重新载入
                if mod_time > module.loadtime:
                    reload(module)
            except:
                pass
     
            module.loadtime = mod_time
            time.sleep(1)
if __name__ == '__main__':
    t_reload = threading.Thread(target=auto_reload)
    t_reload.start()
    
    t_reload2 = threading.Thread(target=printworker)
    t_reload2.start()

        我们启动运行reloaddemo.py  ,一个线程不停的打印reloadsetting模块中的msg,一个线程不停的尝试重载reloadsetting模块。在运行过程中,修改reloadsetting模块中的msg的内容,很快,打印出来的内容也会随之发生变化,你可能会担心,如果在修改时不慎写错了代码,比如把msg给删除掉了,或者写成了 msg =   ,而后面根本就没有赋值,那重载岂不是就失败了么,这种担忧是多余的,即便模块reloadsetting中有错误,那么在调用reload函数时,也不会发生错误,模块仍然是上一次有效reload后的状态,不信,你可以试一试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值