[Python-checkins] r74658 - in python/branches/py3k: Lib/http/client.py Misc/NEWS
chris.withers
python-checkins at python.org
Fri Sep 4 19:04:16 CEST 2009
Author: chris.withers
Date: Fri Sep 4 19:04:16 2009
New Revision: 74658
Log:
Fixes issue #6838: use a list to accumulate the value instead of repeatedly concatenating strings.
Modified:
python/branches/py3k/Lib/http/client.py
python/branches/py3k/Misc/NEWS
Modified: python/branches/py3k/Lib/http/client.py
==============================================================================
--- python/branches/py3k/Lib/http/client.py (original)
+++ python/branches/py3k/Lib/http/client.py Fri Sep 4 19:04:16 2009
@@ -518,10 +518,7 @@
def _read_chunked(self, amt):
assert self.chunked != _UNKNOWN
chunk_left = self.chunk_left
- value = b""
-
- # 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()
@@ -534,22 +531,22 @@
# close the connection as protocol synchronisation is
# probably lost
self.close()
- raise IncompleteRead(value)
+ raise IncompleteRead(b''.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 b''.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 b''.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
@@ -570,7 +567,7 @@
# we read everything; close the "file"
self.close()
- return value
+ return b''.join(value)
def _safe_read(self, amt):
"""Read the number of bytes requested, compensating for partial reads.
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS (original)
+++ python/branches/py3k/Misc/NEWS Fri Sep 4 19:04:16 2009
@@ -68,6 +68,11 @@
Library
-------
+- Issue #6838: Use a list to accumulate the value instead of
+ repeatedly concatenating strings in http.client's
+ HTTPResponse._read_chunked providing a significant speed increase
+ when downloading large files servend with a Transfer-Encoding of 'chunked'.
+
- Trying to import a submodule from a module that is not a package, ImportError
should be raised, not AttributeError.
More information about the Python-checkins
mailing list