summaryrefslogtreecommitdiffstats
path: root/Doc/library
diff options
context:
space:
mode:
authorRuben Vorderman <r.h.p.vorderman@lumc.nl>2021-09-02 15:02:59 (GMT)
committerGitHub <noreply@github.com>2021-09-02 15:02:59 (GMT)
commitea23e7820f02840368569db8082bd0ca4d59b62a (patch)
tree44dcdd66cf7335a31a837d7e84a857e5c677e2b3 /Doc/library
parenta7ef15aae8608560bffeeaba412c10e52cab07dd (diff)
downloadcpython-ea23e7820f02840368569db8082bd0ca4d59b62a.zip
cpython-ea23e7820f02840368569db8082bd0ca4d59b62a.tar.gz
cpython-ea23e7820f02840368569db8082bd0ca4d59b62a.tar.bz2
bpo-43613: Faster implementation of gzip.compress and gzip.decompress (GH-27941)
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
Diffstat (limited to 'Doc/library')
-rw-r--r--Doc/library/gzip.rst17
-rw-r--r--Doc/library/zlib.rst46
2 files changed, 42 insertions, 21 deletions
diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst
index 33c4067..8cea264 100644
--- a/Doc/library/gzip.rst
+++ b/Doc/library/gzip.rst
@@ -174,19 +174,30 @@ The module defines the following items:
Compress the *data*, returning a :class:`bytes` object containing
the compressed data. *compresslevel* and *mtime* have the same meaning as in
- the :class:`GzipFile` constructor above.
+ the :class:`GzipFile` constructor above. When *mtime* is set to ``0``, this
+ function is equivalent to :func:`zlib.compress` with *wbits* set to ``31``.
+ The zlib function is faster.
.. versionadded:: 3.2
.. versionchanged:: 3.8
Added the *mtime* parameter for reproducible output.
+ .. versionchanged:: 3.11
+ Speed is improved by compressing all data at once instead of in a
+ streamed fashion. Calls with *mtime* set to ``0`` are delegated to
+ :func:`zlib.compress` for better speed.
.. function:: decompress(data)
Decompress the *data*, returning a :class:`bytes` object containing the
- uncompressed data.
+ uncompressed data. This function is capable of decompressing multi-member
+ gzip data (multiple gzip blocks concatenated together). When the data is
+ certain to contain only one member the :func:`zlib.decompress` function with
+ *wbits* set to 31 is faster.
.. versionadded:: 3.2
-
+ .. versionchanged:: 3.11
+ Speed is improved by decompressing members at once in memory instead of in
+ a streamed fashion.
.. _gzip-usage-examples:
diff --git a/Doc/library/zlib.rst b/Doc/library/zlib.rst
index ec60ea2..793c90f 100644
--- a/Doc/library/zlib.rst
+++ b/Doc/library/zlib.rst
@@ -47,7 +47,7 @@ The available exception and functions in this module are:
platforms, use ``adler32(data) & 0xffffffff``.
-.. function:: compress(data, /, level=-1)
+.. function:: compress(data, /, level=-1, wbits=MAX_WBITS)
Compresses the bytes in *data*, returning a bytes object containing compressed data.
*level* is an integer from ``0`` to ``9`` or ``-1`` controlling the level of compression;
@@ -55,11 +55,35 @@ The available exception and functions in this module are:
is slowest and produces the most. ``0`` (Z_NO_COMPRESSION) is no compression.
The default value is ``-1`` (Z_DEFAULT_COMPRESSION). Z_DEFAULT_COMPRESSION represents a default
compromise between speed and compression (currently equivalent to level 6).
+
+ .. _compress-wbits:
+
+ The *wbits* argument controls the size of the history buffer (or the
+ "window size") used when compressing data, and whether a header and
+ trailer is included in the output. It can take several ranges of values,
+ defaulting to ``15`` (MAX_WBITS):
+
+ * +9 to +15: The base-two logarithm of the window size, which
+ therefore ranges between 512 and 32768. Larger values produce
+ better compression at the expense of greater memory usage. The
+ resulting output will include a zlib-specific header and trailer.
+
+ * −9 to −15: Uses the absolute value of *wbits* as the
+ window size logarithm, while producing a raw output stream with no
+ header or trailing checksum.
+
+ * +25 to +31 = 16 + (9 to 15): Uses the low 4 bits of the value as the
+ window size logarithm, while including a basic :program:`gzip` header
+ and trailing checksum in the output.
+
Raises the :exc:`error` exception if any error occurs.
.. versionchanged:: 3.6
*level* can now be used as a keyword parameter.
+ .. versionchanged:: 3.11
+ The *wbits* parameter is now available to set window bits and
+ compression type.
.. function:: compressobj(level=-1, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY[, zdict])
@@ -76,23 +100,9 @@ The available exception and functions in this module are:
*method* is the compression algorithm. Currently, the only supported value is
:const:`DEFLATED`.
- The *wbits* argument controls the size of the history buffer (or the
- "window size") used when compressing data, and whether a header and
- trailer is included in the output. It can take several ranges of values,
- defaulting to ``15`` (MAX_WBITS):
-
- * +9 to +15: The base-two logarithm of the window size, which
- therefore ranges between 512 and 32768. Larger values produce
- better compression at the expense of greater memory usage. The
- resulting output will include a zlib-specific header and trailer.
-
- * −9 to −15: Uses the absolute value of *wbits* as the
- window size logarithm, while producing a raw output stream with no
- header or trailing checksum.
-
- * +25 to +31 = 16 + (9 to 15): Uses the low 4 bits of the value as the
- window size logarithm, while including a basic :program:`gzip` header
- and trailing checksum in the output.
+ The *wbits* parameter controls the size of the history buffer (or the
+ "window size"), and what header and trailer format will be used. It has
+ the same meaning as `described for compress() <#compress-wbits>`__.
The *memLevel* argument controls the amount of memory used for the
internal compression state. Valid values range from ``1`` to ``9``.