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)

Python动态模块加载

5.测试模块加载

from Env import  Env, config
from Mod import  ModHandler
def test():
    #加载configenv
    env = Env(config)
    #启动加载模块
    mod = ModHandler()
    #加载模块中注入config
    mod.set_env(env)
    #启动加载
    mod.start_up()
test()
Python动态模块加载