Как сделать ответ фляги клиенту асинхронно?

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, посмотрите здесь.