首页 > 解决方案 > 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'

标签: pythonpostpython-requests

解决方案


推荐阅读