在等待结果之前在python中实现Fire and Forget并从函数返回

时间:2019-06-11 10:01:02

标签: python asynchronous

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

这使我想要异步行为的原因无效,因为我本质上在等待上传之后再返回客户端。

0 个答案:

没有答案