chglog:2013-10-16 发现了一个新函数 setattr可以实现__dict__那段,不需要判断是否存在该成员:在1*行setattr(module, loadtime, 0)然后在2*行setattr(module, loadtime, mod_time)
注:getattr可以取属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # -*- coding: utf-8 -*- # 热更新 # 当修改配置后,只需reload指定模块就可以在不重启服务的情况下读取修改的配置 import time import sys, os def auto_reload(): mods = [ "my_config" ] # the need reload modules for mod in mods: try : module = sys.modules[mod] except : continue filename = module.__file__ # .pyc修改时间不会变,又不能删除.pyc,所以就用.py的修改时间,如果有更好的办法就谢谢了. if filename.endswith( ".pyc" ): filename = filename.replace( ".pyc" , ".py" ) mod_time = os.path.getmtime(filename) 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 # 2* if __name__ = = "__main__" : import time import my_config tmp = None """模拟服务 """ while True : auto_reload() if my_config.ip ! = tmp: print my_config.ip tmp = my_config.ip time.sleep( 2 ) |
联系客服