Flask, как вызвать метод и не дожидаясь его ответа вернуть ответ в jsonify?

Есть роут, при запросе которого должен вызваться метод draw() который в свою очередь рисует картинку с помощью библиотеки Pillow.
Проблема в том, что вся эта отрисовка занимает порядка 10 секунд (особенности драйвера e-ink дисплея)

from draw import Drawing

@app.route(api_url('/<string:route>'), methods=['POST'])
def router(route):
    try:
        req_data = request.json
        if route == 'weather':
            Drawing().draw()
            return jsonify(status='Draw'), 200
        else:
            return abort(404)
    except Exception as e:
        logError(e)
        return abort(400)

Вопрос в том как вызвать метод, чтобы началась отрисовка и при этом не дожидаясь ответа данного метода вернуть ответ запроса в json?
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
GavriKos
@GavriKos
Надо отделять мух от котлет.
В роуте возводите флаг "нужна перерисовка". Отдельным потоком (а еще лучше - отдельным сервисом) мониторите этот флаг и соответствующе реагируете. В противном случае вы огребете проблем как только к роуту обратится больше 1 клиента.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Zanak
Асинхрон на базе очередей редиски не вариант? Я про что - то подобное этому.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы