yield streamed bytes as soon as they arrive #2125
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Right now, calling
read
withamt = None
(orrequests.iter_content(chunk_size=None)
) seems to wait for the entire response contents to arrive before yielding, which contradicts the docs in bothurllib3
andrequests
. This is discussed in #2123.For instance, this change makes the following correctly yield bytes as they arrive, provided
CHUNK_SIZE
is set to-1
:The requests docs say this should already be happening if CHUNK_SIZE is set to
None
, but it doesn't:And so do the docs for
HTTPResponse
'sstream(
that this value is passed through to:But in fact
None
forces the entire response to be read before yielding.I was hesitant to make a change that would affect the existing behaviour of
None
or positive integers, so here you specify a chunk size of-1
to activate this "stream on any bytes" behaviour. Hopefully this is suitable.