いくつかの設定に従ってモジュールをロードしようとしています。実用的なソリューションを見つけましたが、高度な 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 を意味します...
この戦略を実装するのは正しい/「pythonic」な方法ですか?