Python动态模块加载
1.配置加载模块的config
config = { "mod": { "stock": { "enabled": True, }, "future": { "enabled": True, } } }
2.保存配置的环境
class Env(object): _env = None def __init__(self, config): Env._env = self self.config = config
3.加载模块处理
# -*- coding: utf-8 -*- import copy from collections import OrderedDict class ModHandler(object): def __init__(self): self._env = None self._mod_list = list() self._mod_dict = OrderedDict() def set_env(self, environment): self._env = environment config = environment.config for mod_name in config['mod']: if config['mod'][mod_name]['enabled'] == False: continue self._mod_list.append(mod_name) def start_up(self): for mod_name in self._mod_list: print('动态加载模块:') print(mod_name) #self._mod_dict[mod_name].start_up(self._env, mod_config)
4.模拟2个子模块(stock和future)
5.测试模块加载
from Env import Env, config from Mod import ModHandler def test(): #加载config到env env = Env(config) #启动加载模块 mod = ModHandler() #加载模块中注入config mod.set_env(env) #启动加载 mod.start_up() test()