summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorNick Pope <nick@nickpope.me.uk>2022-07-22 21:08:10 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-01-05 19:26:56 +0100
commitb47f2f5b907732d80b164f1f361ae39da94a3fa6 (patch)
tree437f0c92ea2b17816d1ad7f200ed077d44c8bce8 /docs
parent57f5669d23fe17d940887e1e3ce694c7366a6330 (diff)
Fixed #33865 -- Optimized LimitedStream wrapper.
The current implementation of LimitedStream is slow because .read() performs an extra copy into a buffer and .readline() performs two extra copies. The stream being wrapped is already typically a BytesIO object so this is unnecessary. This implementation has largely been untouched for 12 years and, inspired by a simpler implementation in werkzeug, it was possible to achieve the following performance improvement: LimitedStream.read() (single line): Mean +- std dev: [bench_limitedstream-main] 286 ns +- 6 ns -> [bench_limitedstream-patch] 227 ns +- 6 ns: 1.26x faster LimitedStream.readline() (single line): Mean +- std dev: [bench_limitedstream-main] 507 ns +- 11 ns -> [bench_limitedstream-patch] 232 ns +- 8 ns: 2.18x faster LimitedStream.read(8192) (single line): Mean +- std dev: [bench_limitedstream-main] 360 ns +- 8 ns -> [bench_limitedstream-patch] 297 ns +- 6 ns: 1.21x faster LimitedStream.readline(8192) (single line): Mean +- std dev: [bench_limitedstream-main] 602 ns +- 10 ns -> [bench_limitedstream-patch] 305 ns +- 10 ns: 1.98x faster LimitedStream.read() (multiple lines): Mean +- std dev: [bench_limitedstream-main] 290 ns +- 5 ns -> [bench_limitedstream-patch] 236 ns +- 6 ns: 1.23x faster LimitedStream.readline() (multiple lines): Mean +- std dev: [bench_limitedstream-main] 517 ns +- 19 ns -> [bench_limitedstream-patch] 239 ns +- 7 ns: 2.16x faster LimitedStream.read(8192) (multiple lines): Mean +- std dev: [bench_limitedstream-main] 363 ns +- 8 ns -> [bench_limitedstream-patch] 311 ns +- 11 ns: 1.17x faster LimitedStream.readline(8192) (multiple lines): Mean +- std dev: [bench_limitedstream-main] 601 ns +- 12 ns -> [bench_limitedstream-patch] 308 ns +- 7 ns: 1.95x faster Geometric mean: 1.59x faster
Diffstat (limited to 'docs')
-rw-r--r--docs/releases/4.2.txt4
1 files changed, 4 insertions, 0 deletions
diff --git a/docs/releases/4.2.txt b/docs/releases/4.2.txt
index 39235aa224..68392161e3 100644
--- a/docs/releases/4.2.txt
+++ b/docs/releases/4.2.txt
@@ -523,6 +523,10 @@ Miscellaneous
.. _`redis-py`: https://pypi.org/project/redis/
+* Manually instantiated ``WSGIRequest`` objects must be provided a file-like
+ object for ``wsgi.input``. Previously, Django was more lax than the expected
+ behavior as specified by the WSGI specification.
+
.. _deprecated-features-4.2:
Features deprecated in 4.2