python - Python 长时间运行的 POST 请求并不总是返回
问题描述
我们用 12 分钟的超时时间进行了长时间的调用。通常,此呼叫会在 5-6 分钟内返回,并且运行良好。但是,在系统负载较重的情况下,请求有时不会结束,而是在 12 分钟超时时结束,并且由于重试逻辑而重试,即使服务器指示它在大约 5 分钟内返回。
@retry(...some stuff, retry up to twice...)
def post(...) -> Dict[str, Any]:
self.logger.info(f'POST API, url: [{url}], params: [{params}], payload: [{payload}]')
response: requests.Response = requests.post(url=url,
params=params,
headers=self.headers,
json=payload,
timeout=720)
self.logger.info(f'Returning from POST API, url: [{url}]')
...
在一般情况下,我得到这两个不同的日志记录语句,一个接一个。但是,有时也会发生这种情况:
[INFO] 2021-09-14T22:15:05.894Z POST API, url: [http://url/myid1], params: [None], payload: [None]
[INFO] 2021-09-14T22:27:06.082Z POST API, url: [http://url/myid1], params: [None], payload: [None]
请注意,它们相隔 12 分钟。
在服务器端,我们在日志中有这个 POST 响应:
[14/Sep/2021:22:20:57 +0000] "POST /myid1 HTTP/1.1" 200 150 "-" "python-requests/2.26.0"
...这应该表明请求在第一次调用后 5 分钟完成并返回。
(由于我的应用程序的第二次发布请求,我们还看到另一个 POST 返回稍后,在 22:31)
所以问题是:如果服务器正在返回响应,为什么我的 requests.post 有时会继续阻塞而不是继续执行?
编辑:我的客户端是 AWS lambda,我的服务器是 EC2 主机
我的标题:
'Content-Type': 'application/json',
'Cache-Control': 'no-cache'
解决方案
推荐阅读
- node.js - 使用多个参数 Node.js 查询 Postgres
- github - 如何从 github 为作曲家编译项目但不使用作曲家存储库?
- python - 如何使用 HTML 重定向到动态 url?
- r - 使用 R 中的 dplyr 库“打印”非 NA 列的名称
- javascript - XMLHttpRequest POST 总是给我 404 错误
- python - 错误:命令出错,退出状态为 1:当 pip install --upgrade gensim
- javascript - axios外部访问时get function undefined,不能使用async和await
- markdown - Markdown:代码块内的数学环境
- sql-server - 基于多列需要窗函数的条件计算
- excel - Excel散点图