客户端未收到Flask应用响应

时间:2020-04-29 02:37:45

标签: python flask python-requests jupyter-notebook

我有一个烧瓶应用程序正在运行一些计算,并且从Jupyter笔记本发出请求。客户端代码遵循基本格式:

outputs = []
for batch in request_batches:
    response = requests.post(flask_address, json=json.dumps(batch), timeout=3600)
    outputs.append(response)

这个想法是遍历一系列请求批次(对于应用程序而言分批处理很有意义)并收集响应。

通常情况下,对于每个批次,我会在Flask应用程序端看到请求记录,并在计算完成后确认“发布”。

00.000.000.000 - - [29/Apr/2020 02:21:46] "POST //docking HTTP/1.1" 200 -

一批完成后,循环继续并发送下一个请求。

我遇到的问题是,有时Flask大小的计算需要比正常时间更长的时间,这会导致笔记本中的请求循环挂起(请注意,比正常时间长几分钟,在设置超时时间)。在Flask大小上,计算成功完成,并且有一个Post确认。

在笔记本大小上,循环挂起,并且没有其他请求。这不是超时问题-没有超时错误。笔记本单元一直挂着,直到我手动中断它为止。

当我中断时,我看到以下堆栈跟踪:

~/opt/anaconda3/envs/env/lib/python3.7/socket.py in readinto(self, b)
    587         while True:
    588             try:
--> 589                 return self._sock.recv_into(b)
    590             except timeout:
    591                 self._timeout_occurred = True

在我中断之后,我可以确认导致循环挂起的响应没有添加到输出中。因此,Flask应用程序以某种方式正在发布响应,但客户端笔记本未收到响应。再次有95%的时间运行正常,但是5%的请求处理时间较长会导致请求循环冻结。

有人知道如何调试吗?

0 个答案:

没有答案