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

Python 如何在烧瓶控制器中正确使用importlib?,python,flask,python-importlib,Python,Flask,Python Importlib,我正在尝试根据一些设置加载模块。我已经找到了一个可行的解决方案,但我需要一位高级python开发人员的确认,这个解决方案是性能最好的,因为将使用它的API端点将处于重载状态 其思想是根据来自用户和其他系统配置的参数更改端点的工作。我正在根据这些设置加载正确的处理程序类。目标是能够轻松创建新的处理程序,而无需修改调用处理程序的代码 这是一个工作示例: /run.py: from flask import Flask, abort import importlib import handlers

我正在尝试根据一些设置加载模块。我已经找到了一个可行的解决方案,但我需要一位高级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)
一个“简单”的处理程序示例。处理程序是需要定义处理程序类的模块:

./handlers/simple.py:

import os  

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

    def name(self):        
        return "simple"
如果我理解正确,那么将在每个查询上对端点进行导入。它意味着在文件系统中查找模块的IO


这是实施这一策略的正确方法吗?

问题转移到codereview。感谢大家的帮助:


我正在关闭此线程。

我会缓存导入,如果可能的话还会缓存白名单。Python会自己缓存导入,请参见和。@plaes:白名单是什么意思?我将深入查看sys.module文档。模块主体在导入时只执行一次。必须使用“reload()”来重新计算模块。所以在这方面没有问题。在Python中,模块只是对象,在接口中使用已知名称只是OOP的一个基本部分。在我看来,你的尝试很奇怪,但它肯定会起作用。我投票决定把这个问题作为离题题来结束,因为它属于主题