Esempio n. 1
0
 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
Esempio n. 2
0
    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
Esempio n. 3
0
 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!"
Esempio n. 4
0
    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!"
Esempio n. 5
0
 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
Esempio n. 6
0
    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