前提・実現したいこと
Flaskを使って、機械学習による推論結果を返すWebアプリを作りたいと思っています(機械学習モデルは別スクリプトで作成済)
この時、Flaskの各関数内の処理を、インタプリタで実行結果を確認しながらスクリプトを書いたり、デバッグをしたいのですが、どのように実施したらいいでしょうか?IDEはPyCharmを利用していますが、IDE非依存の方法でも助かります。よろしくお願いいたします。
検証したこと
【Python】Flask + PyCharm でいい感じにデバッグする方法を参考に、app.runを実行するファイルに対して、
Python
1application.run(passthrough_errors=True, use_reloader=True)
とすることで、PyCharmのデバッガでブレイクポイントを設定すると、その後インタプリタで操作できるのですが、当該処理に行くまでWebページを操作する必要があったり、定期的に変数がリセットされたり(おそらく、変更を検知してreloadするため)、処理途中で動かなくなることも多々あり、もっと簡便な方法でプログラムを修正できるようにしたいと思っています。
サンプルスクリプト
以下のスクリプトを引用させていただいております。例えば、predict関数内のy_pred内の平均値を計算したい場合、計算結果を見ながら(異常値やnanが発生していないかなど)、スクリプトを書いていきたいと思っています。
Python
1from flask import Flask, request, jsonify, abort 2import pandas as pd 3import pickle 4from datetime import datetime 5import sys 6sys.path.append("./model") # 前処理で使った自作モジュール「pipeline」を読み込むためPYTHONPATHに追加 7app = Flask(__name__) 8 9# アプリ起動時に前処理パイプラインと予測モデルを読み込んでおく 10preprocess = pickle.load(open("model/preprocess.pkl", "rb")) 11model = pickle.load(open("model/model.pkl", "rb")) 12 13 14@app.route('/api/predict', methods=["POST"]) 15def predict(): 16 """/api/predict にPOSTリクエストされたら予測値を返す関数""" 17 try: 18 # APIにJSON形式で送信された特徴量 19 X = pd.DataFrame(request.json, index=[0]) 20 # 特徴量を追加 21 X["trade_date"] = datetime.now() 22 # 前処理 23 X = preprocess.transform(X) 24 # 予測 25 y_pred = model.predict(X, num_iteration=model.best_iteration_) 26 response = {"status": "OK", "predicted": y_pred[0]} 27 return jsonify(response), 200 28 except Exception as e: 29 print(e) # デバッグ用 30 abort(400) 31 32 33@app.errorhandler(400) 34def error_handler(error): 35 """abort(400) した時のレスポンス""" 36 response = {"status": "Error", "message": "Invalid Parameters"} 37 return jsonify(response), error.code 38 39 40if __name__ == "__main__": 41 app.run(debug=True) # 開発用サーバーの起動
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。