Отложенное завершение ответа на запрос по другому событию (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.
Есть идеи, как добиться такого?