如何在烧瓶控制器中正确使用importlib?

时间:2015-07-09 10:05:02

标签: python flask python-importlib

我正在尝试根据某些设置加载模块。我找到了一个可行的解决方案,但我需要一位高级python开发人员的确认,这个解决方案性能最佳,因为使用它的API端点将处于高负载状态。

我们的想法是根据用户和其他系统配置中的参数更改端点的工作。我正在根据这些设置加载正确的处理程序类。目标是能够轻松创建新的处理程序,而无需修改调用处理程序的代码。

这是一个有效的例子:

./ run.py:

from flask import Flask, abort 
import importlib 
import handlers  

app = Flask(__name__)  

@app.route('/') 
def api_endpoint():     
    try:         
        endpoint = "simple" # Custom logic to choose the right handler        
        handlerClass = getattr(importlib.import_module('.'+str(endpoint), 'handlers'), 'Handler')         
        handler = handlerClass()     
    except Exception as e:         
        print(e)         
        abort(404)      

    print(handlerClass, handler, handler.value, handler.name())      

    # Handler processing. Not yet implemented

    return "Hello World"  

if __name__ == "__main__":     
    app.run(host='0.0.0.0', port=8080, debug=True)

一个“简单”的处理程序示例。处理程序是一个需要定义Handler类的模块:

./ handlers / simple.py:

import os  

class Handler:     
    def __init__(self):         
        self.value = os.urandom(5)      

    def name(self):        
        return "simple"

如果我理解正确,则会对端点的每个查询执行导入。它表示文件系统中的IO,用于查找模块,...

这是实施此策略的正确/“pythonic”方式吗?

1 个答案:

答案 0 :(得分:0)

问题已移至codereview。感谢大家的帮助:https://codereview.stackexchange.com/questions/96533/extension-pattern-in-a-flask-controller-using-importlib

我正在关闭这个帖子。