0

HTTP リクエストを介して検出ルーチンをトリガーするために、Flask を使用して Web アプリケーションを作成しました。

基本的にはエンドポイントのURLにGETリクエストを送るたびに関数を実行させたい。
私が使用しているコードは次のとおりです。

web_app = Flask(__name__)


@web_app.route('/test/v1.0/run', methods=['GET'])
def main():
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)

    while(True):
        ret, frame = cap.read()

        ***performing operations on each frame and running ML models on them***

    return ('', 204)

if __name__ == '__main__':
    web_app.run(debug=True)

私が使用する場合、すべてが初めてうまくいきます:

curl -i http://localhost:5000/test/v1.0/run

関数 main() が実行され、最後に結果がオンライン データベースにアップロードされます。
この後、プログラムは URL をリッスンし続けます。別の GET リクエストを送信すると、main() が再度実行されますが、while ループの最初の反復後にハングします。

forループに配置して、同じコードを複数回実行してみました:

for i in range(10):
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)

    while(True):
        ret, frame = cap.read()

        ***performing operations on each frame and running ML models on them***

問題なく動作するので、ハングはコード内で行っていることに依存するべきではありません。
問題は、関数をトリガーするためにフラスコを使用しているという事実によって引き起こされるはずですが、この場合、開始後に main() がハングする理由がわかりません。私は一般的にフラスコとWebアプリケーションに非常に慣れていないので、おそらくここで非常に単純なものが欠けています.

4

1 に答える 1