zoukankan      html  css  js  c++  java
  • Python动态加载模块

    需求:实现一个简单的pyton程序,接收两个参数:plugin_name, data,根据不同的plugin_name定位到不同的逻辑处理模块并进行输出。
    实现方案:
    使用python的库函数:load_source,将插件模块加载到一个dict中key为模块名称,value为类的实例,核心代码:

    def load_plugins():
        global plugin_dict
        # 遍历插件目录加载所有py结尾的模块
        for root, dirs, files in os.walk(module_path):
            for file in files:
                if file.endswith('.py'):
                    module_name = file[:-3]
                    print module_name
                    module_file_path = os.path.join(root, file)
                    module = load_source(module_name, module_file_path)
                    # 判断插件中是否存在handler类
                    if 'handler' in dir(module):
                        print 'load module: %s' % module_name
                        # 初始化类的实例并存入dict中,
                        clazz = getattr(module, class_name)
                        clazz_instance = clazz()
                        plugin_dict.update({module_name:clazz_instance})


    插件代码样例:

    # 统一的类
    class handler:
        # 统一的处理接口
        def parse(self, data):
            print data
            result = []
            result.append(1)
            result.append(2)
            return json.dumps(result)


    调用代码:

            # 根据plugin找到对应的实例
            clazz_instance = plugin_dict[plugin]
            try:
                ret = clazz_instance.parse(data_obj)
                return ret
            except Exception,e :
                print traceback.format_exc()


  • 相关阅读:
    Web负载均衡的几种实现方式
    DNS负载均衡
    NoSQL开篇——为什么要使用NoSQL
    mySQL优化 my.ini 配置说明
    mysql性能优化-慢查询分析、优化索引和配置
    MySQL性能优化的最佳20+条经验
    IOS的UIPickerView 和UIDatePicker
    IOS的KVC
    IOS中的通知NSNotification
    IOS对话框UIAlertView
  • 原文地址:https://www.cnblogs.com/yancey/p/3889032.html
Copyright © 2011-2022 走看看