def init_model_reload_dic(self): """ 初始化reload字典 """ for name, module in sys.modules.items(): filename = comm_func.is_code_module(module) if not filename: continue filename = os.path.normpath(filename) if not os.path.isfile(filename): continue # 文件上次修改的时间 disk_time = os.path.getmtime(filename) self.model_modify[name] = disk_time
def init_model_reload_dic(self): """ 初始化reload字典 """ for name, module in sys.modules.items(): filename = comm_func.is_code_module(module) if not filename: continue filename = os.path.normpath(filename) if not os.path.isfile(filename): continue # 文件上次修改的时间 disk_time = os.path.getmtime(filename) self.model_modify[name] = disk_time
def reload(self): logger.info("Please Wait.Reloading...") modified_list = self.__check_modified() module_dict = {} logger.info('reload modified_list = %s', modified_list) for module_name in modified_list: module = sys.modules.get(module_name) if not module: continue module_dict[module_name] = module # 模块以前的内容, 模块修改时间 save_model_dic, model_modify = {}, {} has_error, error, file_ls = False, '', [] for module_name, module in module_dict.items(): # 潜规则 # __main__和 以setkup结尾的模块不参与reload if module_name == '__main__' or module_name.endswith('setup'): continue # 会重读自己 这里 没找到好办法 先try住不处理 if module: reload_res, save_cotent, error = _reload_module(module) filename = comm_func.is_code_module(module) file_ls.append(filename) save_model_dic[module_name] = [module, save_cotent] model_modify[module_name] = os.path.getmtime(filename) if reload_res: logger.info('successful reload module %s', module_name) else: has_error = True break if has_error: # 出现reload错误,还原模块 for _, [module, save_cotent] in save_model_dic.iteritems(): setattr(module, '__dict__', save_cotent) return has_error, error else: # 没有reload错误, 设置reload的模块的修改时间 self.model_modify.update(model_modify) if file_ls: return has_error, "\n".join(file_ls) else: return has_error, "no code file need to reload!"
def reload(self): logger.info("Please Wait.Reloading...") modified_list = self.__check_modified() module_dict = {} logger.info('reload modified_list = %s', modified_list) for module_name in modified_list: module = sys.modules.get(module_name) if not module: continue module_dict[module_name] = module # 模块以前的内容, 模块修改时间 save_model_dic, model_modify = {}, {} has_error, error, file_ls = False, '', [] for module_name, module in module_dict.items(): # 潜规则 # __main__和 以setkup结尾的模块不参与reload if module_name == '__main__' or module_name.endswith('setup'): continue # 会重读自己 这里 没找到好办法 先try住不处理 if module: reload_res, save_cotent, error = _reload_module(module) filename = comm_func.is_code_module(module) file_ls.append(filename) save_model_dic[module_name] = [module, save_cotent] model_modify[module_name] = os.path.getmtime(filename) if reload_res: logger.info('successful reload module %s', module_name) else: has_error = True break if has_error: # 出现reload错误,还原模块 for _, [module, save_cotent] in save_model_dic.iteritems(): setattr(module, '__dict__', save_cotent) return has_error, error else: # 没有reload错误, 设置reload的模块的修改时间 self.model_modify.update(model_modify) if file_ls: return has_error, "\n".join(file_ls) else: return has_error, "no code file need to reload!"
def __check_modified(self): """ 获得要reload的模块列表 """ modules = [] for name, module in sys.modules.items(): filename = comm_func.is_code_module(module) if not filename: continue filename = os.path.normpath(filename) if not os.path.isfile(filename): continue # 上次reload的时间 ls_reload_time = self.model_modify.get(name) if not ls_reload_time: # 找不到第一次reload , 取对应文件上次修改的时间作为上次reload的时间 modules.append(name) else: # 文件上次修改的时间 disk_time = os.path.getmtime(filename) if disk_time is not None and ls_reload_time != disk_time: modules.append(name) return modules
def __check_modified(self): """ 获得要reload的模块列表 """ modules = [] for name, module in sys.modules.items(): filename = comm_func.is_code_module(module) if not filename: continue filename = os.path.normpath(filename) if not os.path.isfile(filename): continue # 上次reload的时间 ls_reload_time = self.model_modify.get(name) if not ls_reload_time: # 找不到第一次reload , 取对应文件上次修改的时间作为上次reload的时间 modules.append(name) else: # 文件上次修改的时间 disk_time = os.path.getmtime(filename) if disk_time is not None and ls_reload_time != disk_time: modules.append(name) return modules