В приложении Flask я загружаю файл на сервер. Я получаю файл от клиента, который отправляет файлы последовательно. Поэтому для ускорения загрузки я хочу вернуть клиенту успешный ответ, как только я сделаю запрос API загрузки, не дожидаясь ответа от сервера.
Мне нужно добиться асинхронного поведения в моем приложении, аналогично тому, как работает узел.
Что мне нужно сделать, это
async def upload_file(f):
result = await upload_api_call(f)
## do stuff based on result, in the background
def scp(data):
file = data.file
# upload file
upload_file(f)
# return success to client without waiting for upload to finish
return 'success'
Я попытался использовать asyncio и смог получить асинхронное поведение. Однако проблема в том, что я все еще не могу отправить ответный ответ клиенту до завершения всего выполнения. Это связано с тем, что перед возвращением нужно использовать следующее в конце функции scp.
try:
loop.run_forever()
finally:
loop.close()
Это сводит на нет мою причину желать асинхронного поведения, поскольку я, по сути, жду загрузки, прежде чем вернуться к клиенту.