首页 > 解决方案 > 在python中实现Fire and Forget并在等待结果之前从函数返回

问题描述

在 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()

这使我想要异步行为的理由无效,因为我实际上是在等待上传,然后再返回客户端。

标签: pythonasynchronous

解决方案


推荐阅读