python - 在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()
这使我想要异步行为的理由无效,因为我实际上是在等待上传,然后再返回客户端。
解决方案
推荐阅读
- google-cloud-platform - 基于 GPU 利用率的自动缩放?
- android - 布局没有资源标识符?
- javascript - 禁用提交按钮,如果没有勾选复选框
- python - Errno 13 运行 virtualenv 时权限被拒绝
- mysql - 如果第二个表中为空,则 MySQL 连接查询结果
- python-3.x - Python Flask 1.0.2 WYSIWYG 文本编辑器不工作
- c# - 为什么在不同脚本中使用相同代码的相机与播放器不同?
- swift - textView 中数组中的文本(在 TableCell 中)
- amazon-web-services - AWS CloudFormation 示例 - AMI ID 来自哪里?
- c++ - 使用 Gcovr 的多个文件的代码覆盖率