Отложенное завершение ответа на запрос по другому событию (Python + Flask)

Пишу веб-сервер на Flask. Вот краткое описание задачи:

Есть два стула роута: /wait и /done

При запросе на /wait ответ не должен приходить до тех пор, пока не будет сделан запрос на /done.

Из-за того, что запросов на /wait могло быть за это время несколько, то при запросе на /done "разрешиться" они должны все.

Вот самый простой и отвратительный вариант написания этого:

from flask import Flask 
app = Flask(__name__) 
 
done = False

@app.route("/wait") 
def wait() -> str:
    global done
    while not done:
        pass
    done = False
    return "Waiting done"

@app.route("/done")
def done() -> str:
    global done
    done = True
    return "Done correctly"

if __name__ == '__main__':
    app.run()

Здесь каждый поток, созданный для обработки запроса на /wait будет тратить ресурсы процессора на проверку условия done == True с максимальной частотой. Хуже и быть не может.

В идеале хотелось бы, чтобы был какой-то инструмент, чтобы отправить поток обработки запроса на /wait в сон, и разбудить его по событию, вызванному запросом на /done.

Есть идеи, как добиться такого?


Ответы (0 шт):