Как сделать ответ фляги клиенту асинхронно?
Flask - это однопоточный веб-сервер. Но я хочу сделать так, чтобы он не блокировался при обработке некоторого трудоемкого запроса.
Например:
from flask import Flask
import time
import sys
app = Flask(__name__)
@app.route("/")
def hello():
print "request"
sys.stdout.flush()
for _ in range(10000000):
for j in range(10000000):
i = 1
return "Hello World!"
if __name__ == "__main__":
app.run(debug=True)
Я хочу, чтобы при каждом запросе клиента к серверу он всегда выводил "запрос" на консоль сразу. Я попробовал gunicorn
и бегу с gunicorn -k gevent -w 4 a:app
но он все равно выглядит синхронно.
Ответы
Ответ 1
Этот фрагмент является хорошей отправной точкой.
Вы также должны изучить Celery или RQ, они правильны для использования для более крупных проектов, что более важно, они не являются флаговыми.
У них также есть интеграция по колбе, Flask-Celery и Flask-RQ.
Ответ 2
Я считаю, что вы спрашиваете о чем-то, называемом "потоковая передача". Для Flask это может быть выполнено с использованием функций генератора и ключевого слова yield
.
Потоковая передача более подробно освещена в официальной документации Flask, посмотрите здесь.