summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorNir Soffer <nirsof@gmail.com>2017-11-06 21:16:37 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2017-11-06 21:16:37 (GMT)
commitad455cd9243319b896c86074ffeb3bf78a82f4ec (patch)
tree48a4989023b45958c9fa7dfe090936506998906d /Doc
parent30f4fa456ef626ad7a92759f492ec7a268f7af4e (diff)
downloadcpython-ad455cd9243319b896c86074ffeb3bf78a82f4ec.zip
cpython-ad455cd9243319b896c86074ffeb3bf78a82f4ec.tar.gz
cpython-ad455cd9243319b896c86074ffeb3bf78a82f4ec.tar.bz2
bpo-31945: Configurable blocksize in HTTP(S)Connection (#4279)
blocksize was hardcoded to 8192, preventing efficient upload when using file-like body. Add blocksize argument to __init__, so users can configure the blocksize to fit their needs. I tested this uploading data from /dev/zero to a web server dropping the received data, to test the overhead of the HTTPConnection.send() with a file-like object. Here is an example 10g upload with the default buffer size (8192): $ time ~/src/cpython/release/python upload-httplib.py 10 https://localhost:8000/ Uploaded 10.00g in 17.53 seconds (584.00m/s) real 0m17.574s user 0m8.887s sys 0m5.971s Same with 512k blocksize: $ time ~/src/cpython/release/python upload-httplib.py 10 https://localhost:8000/ Uploaded 10.00g in 6.60 seconds (1551.15m/s) real 0m6.641s user 0m3.426s sys 0m2.162s In real world usage the difference will be smaller, depending on the local and remote storage and the network. See https://github.com/nirs/http-bench for more info.
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/http.client.rst18
-rw-r--r--Doc/whatsnew/3.7.rst7
2 files changed, 23 insertions, 2 deletions
diff --git a/Doc/library/http.client.rst b/Doc/library/http.client.rst
index 53de40f..c4b7c79 100644
--- a/Doc/library/http.client.rst
+++ b/Doc/library/http.client.rst
@@ -31,7 +31,8 @@ HTTPS protocols. It is normally not used directly --- the module
The module provides the following classes:
-.. class:: HTTPConnection(host, port=None[, timeout], source_address=None)
+.. class:: HTTPConnection(host, port=None[, timeout], source_address=None, \
+ blocksize=8192)
An :class:`HTTPConnection` instance represents one transaction with an HTTP
server. It should be instantiated passing it a host and optional port
@@ -42,6 +43,8 @@ The module provides the following classes:
(if it is not given, the global default timeout setting is used).
The optional *source_address* parameter may be a tuple of a (host, port)
to use as the source address the HTTP connection is made from.
+ The optional *blocksize* parameter sets the buffer size in bytes for
+ sending a file-like message body.
For example, the following calls all create instances that connect to the server
at the same host and port::
@@ -58,11 +61,14 @@ The module provides the following classes:
The *strict* parameter was removed. HTTP 0.9-style "Simple Responses" are
not longer supported.
+ .. versionchanged:: 3.7
+ *blocksize* parameter was added.
+
.. class:: HTTPSConnection(host, port=None, key_file=None, \
cert_file=None[, timeout], \
source_address=None, *, context=None, \
- check_hostname=None)
+ check_hostname=None, blocksize=8192)
A subclass of :class:`HTTPConnection` that uses SSL for communication with
secure servers. Default port is ``443``. If *context* is specified, it
@@ -338,6 +344,14 @@ HTTPConnection Objects
Close the connection to the server.
+
+.. attribute:: HTTPConnection.blocksize
+
+ Buffer size in bytes for sending a file-like message body.
+
+ .. versionadded:: 3.7
+
+
As an alternative to using the :meth:`request` method described above, you can
also send your request step by step, by using the four functions below.
diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst
index 6c81a2c..af722be 100644
--- a/Doc/whatsnew/3.7.rst
+++ b/Doc/whatsnew/3.7.rst
@@ -276,6 +276,13 @@ README.rst is now included in the list of distutils standard READMEs and
therefore included in source distributions.
(Contributed by Ryan Gonzalez in :issue:`11913`.)
+http.client
+-----------
+
+Add Configurable *blocksize* to ``HTTPConnection`` and
+``HTTPSConnection`` for improved upload throughput.
+(Contributed by Nir Soffer in :issue:`31945`.)
+
http.server
-----------