大于64Kb的JSON负载请求卡顿
主题:Python,使用json数据发送请求时超过64Kb就卡住了
在ubuntu linux上,使用requests 2.3版本
for-loop:
response = requests.post(url, data=json.dumps(payload), headers=headers)
results = response.json()
代码可以正常运行,但当数据超过64Kb时,程序就会卡住。通过使用pudb调试工具,我找到了问题所在:
Traceback
File "/home/ubuntu/anaconda/lib/python2.7/socket.py", line 476 in readline
data = self._socket.recv(self._rbufsize)
Variables:
buf: StringIO
buf_len: 0
self: _fileobject
size: 65537
Stack:
readline [_fileobject] socket.py
_read_status [HTTPResponse] httplib.py
begin [HTTPResponse] httplib.py
getresponse [HTTPConnection]
_make_request [HTTPConnectionpool]
urlopen [HTTPConnectionpool]
send [HTTPAdaptor] adapters.py
send [Session] sessions.py:486
request [Session] sessions.py
request api.py:44
post api.py:88
看起来像是某个缓冲区没有被清空。有没有什么办法可以解决这个问题?
1 个回答
0
requests
已经成功上传了请求,问题出在 服务器 没有回应。
具体来说,代码在等待从套接字获取数据;self._socket.recv(self._rbufsize)
的意思是从套接字中读取最多 self._rbufsize
字节的数据。
从你的跟踪信息来看,这个调用来自 HTTPResponse._read_status
这一行,它正在尝试读取 HTTP 响应状态行;也就是说,它在等待服务器返回像 HTTP 1.1 200 OK
这样的响应行。
你需要找出为什么你的服务器似乎无法处理超过 64KB 的请求。Python 的 requests 库已经尽力上传请求了。