python - DJANGO:如何在后台运行 API 请求,让我的用户不会遇到延迟?
问题描述
我有一个从 API 获取数据的脚本。API 需要一些时间来计算和返回值。
这意味着我的用户会经历很多延迟(9 秒)才能转到下一页,直到 API 返回值。
有没有办法在后台使用 API 运行脚本?所以用户可以毫无阻碍地继续他们的体验吗?(我想知道异步函数是否有帮助?)
我用来运行 API 的代码:
import requests
body = {...}
headers = {
'Accept': 'application/json, application/geo+json, application/gpx+xml, img/png; charset=utf-8',
'Authorization': '...',
'Content-Type': 'application/json; charset=utf-8'
}
call = requests.post('https://api....', json=body, headers=headers)
print(call.status_code, call.reason)
print(call.text)
更新:
对于那些不熟悉 celery 的人(比如我),快速更新我为使其正常工作所做的事情。
- 启动并运行 Redis 服务器:此链接说明了如何执行此操作。它来自 Digital Ocean,但我在 Hetzner 上使用了一个服务器,它运行得非常好。
- ...我会在继续进行时更新其余部分
解决方案
经典的方法是将任何长时间运行的任务发送给celery worker
推荐阅读
- excel - 如何根据另一个单元格文本清除一系列单元格中的数据?
- python - Dijkstra 的 SPF 算法中两个顶点(节点)实例之间的 TypeError
- r - 在 RStudio 中使用 RWeka 导入 ARFF 数据集(依赖错误:rJava)
- python - python 扩展上的地址消毒剂
- android - RecyclerView 中的 ViewModel
- apache-spark - 在 VM 集群上安装 Presto 并将其连接到不同 Yarn 集群上的 HDFS
- git - 合并 Git 存储库
- laravel - laravel 5:“未按要求设置会话存储。” 在 api.php
- javascript - 使用 react 和 componentDidMount 获取数据
- django - 在 nginx Docker 容器中重写 URL 错误地使用了内部端口