Возврат несколько раз от одного вызова API в Flask Restful - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу вызвать функцию generate () и отправить пользователю сообщение, но затем продолжить выполнение функции.

@application.route("/api/v1.0/gen", methods=['POST'])
def generate():
    return "Your id for getting the generated data is 'hgF8_dh4kdsRjdr'"
    main() #generate a data
    return "Successfully generated something. Use your id to get the data"

Я понимаю, что это неправильный способ возврата, но я надеюсь, Вы понимаете, чего я пытаюсь достичь sh. Может быть, Flask имеет какой-то встроенный метод для многократного возврата из одного вызова API?

1 Ответ

0 голосов
/ 14 апреля 2020

По сути, то, что вы описываете, называется событиями, отправленными сервером (он же SSE)

Различие этого формата в том, что они возвращают тип ответа 'eventstream' вместо обычного JSON / открытого текста
И если вы хотите использовать его с python / flask, вам нужны генераторы.

Пример небольшого кода (с запросом GET):

@application.route("/api/v1.0/gen", methods=['GET'])
def stream():
    def eventStream():
        text = "Your id for getting the generated data is 'hgF8_dh4kdsRjdr'"
        yield str(Message(data = text, type="message"))
        main()
        text = "Successfully generated something. Use your id to get the data"
        yield str(Message(data = text, type="message"))
    resp.headers['Content-Type'] = 'text/event-stream'
    resp.headers['Cache-Control'] = 'no-cache'
    resp.headers['Connection'] = 'keep-alive'
    return resp

Message класс вы можете найти здесь: https://gist.github.com/Alveona/b79c6583561a1d8c260de7ba944757a7

И из Конечно, вам нужен конкретный c клиент, который может правильно читать такие ответы.
postwoman.io поддерживает SSE на вкладке реального времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...