У меня есть простое веб-приложение Flask, которое делает много HTTP-запросов внешней службе, когда пользователь нажимает кнопку. На стороне клиента у меня есть приложение angularjs.
Серверная часть кода выглядит так (используя multiprocessing.dummy):
worker = MyWorkerClass()
pool = Pool(processes=10)
result_objs = [pool.apply_async(worker.do_work, (q,))
for q in queries]
pool.close() # Close pool
pool.join() # Wait for all task to finish
errors = not all(obj.successful() for obj in result_objs)
# extract result only from successful task
items = [obj.get() for obj in result_objs if obj.successful()]
Как вы можете видеть, я использую apply_async
, потому что я хочу позже проверить каждую задачу и извлечь из них результат только в том случае, если задача не вызвала никаких исключений.
Я понял, что для того, чтобы показать индикатор выполнения на стороне клиента, мне нужно опубликовать где-то количество завершенных задач, чтобы я сделал простое представление:
@app.route('/api/v1.0/progress', methods=['GET'])
def view_progress():
return jsonify(dict(progress=session['progress']))
Это покажет содержимое переменной сеанса. Теперь, во время процесса, мне нужно обновить эту переменную с количеством завершенных задач (общее количество задач для завершения является фиксированным и известным).
Любые идеи о том, как это сделать? Я работаю в правильном направлении?
Я видел похожие вопросы на SO как этот, но я не могу адаптировать ответ к моему делу.
Спасибо.