mirror of
https://github.com/python/cpython.git
synced 2025-08-16 23:01:34 +00:00
Fixes issue #6838: use a list to accumulate the value instead of repeatedly concatenating strings.
This commit is contained in:
parent
cf4a702744
commit
49148cf528
2 changed files with 14 additions and 12 deletions
|
@ -544,10 +544,7 @@ class HTTPResponse:
|
|||
def _read_chunked(self, amt):
|
||||
assert self.chunked != _UNKNOWN
|
||||
chunk_left = self.chunk_left
|
||||
value = ''
|
||||
|
||||
# XXX This accumulates chunks by repeated string concatenation,
|
||||
# which is not efficient as the number or size of chunks gets big.
|
||||
value = []
|
||||
while True:
|
||||
if chunk_left is None:
|
||||
line = self.fp.readline()
|
||||
|
@ -560,22 +557,22 @@ class HTTPResponse:
|
|||
# close the connection as protocol synchronisation is
|
||||
# probably lost
|
||||
self.close()
|
||||
raise IncompleteRead(value)
|
||||
raise IncompleteRead(''.join(value))
|
||||
if chunk_left == 0:
|
||||
break
|
||||
if amt is None:
|
||||
value += self._safe_read(chunk_left)
|
||||
value.append(self._safe_read(chunk_left))
|
||||
elif amt < chunk_left:
|
||||
value += self._safe_read(amt)
|
||||
value.append(self._safe_read(amt))
|
||||
self.chunk_left = chunk_left - amt
|
||||
return value
|
||||
return ''.join(value)
|
||||
elif amt == chunk_left:
|
||||
value += self._safe_read(amt)
|
||||
value.append(self._safe_read(amt))
|
||||
self._safe_read(2) # toss the CRLF at the end of the chunk
|
||||
self.chunk_left = None
|
||||
return value
|
||||
return ''.join(value)
|
||||
else:
|
||||
value += self._safe_read(chunk_left)
|
||||
value.append(self._safe_read(chunk_left))
|
||||
amt -= chunk_left
|
||||
|
||||
# we read the whole chunk, get another
|
||||
|
@ -596,7 +593,7 @@ class HTTPResponse:
|
|||
# we read everything; close the "file"
|
||||
self.close()
|
||||
|
||||
return value
|
||||
return ''.join(value)
|
||||
|
||||
def _safe_read(self, amt):
|
||||
"""Read the number of bytes requested, compensating for partial reads.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue