大于64Kb的JSON负载请求卡顿

0 投票
1 回答
940 浏览
提问于 2025-04-18 09:56

主题: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 库已经尽力上传请求了。

撰写回答