| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1381,10 +1381,11 @@ are always available. They are listed here in alphabetical order. | |||
| 1381 | 1381 | :func:`io.TextIOWrapper.reconfigure`. When no *buffering* argument is | |
| 1382 | 1382 | given, the default buffering policy works as follows: | |
| 1383 | 1383 | ||
| 1384 | - * Binary files are buffered in fixed-size chunks; the size of the buffer is | ||
| 1385 | - chosen using a heuristic trying to determine the underlying device's "block | ||
| 1386 | - size" and falling back on :const:`io.DEFAULT_BUFFER_SIZE`. On many systems, | ||
| 1387 | - the buffer will typically be 4096 or 8192 bytes long. | ||
| 1384 | + * Binary files are buffered in fixed-size chunks; the size of the buffer | ||
| 1385 | + is set to `max(io.DEFAULT_BUFFER_SIZE, st_blksize)` using a heuristic | ||
| 1386 | + trying to determine the underlying device's "block size" when available | ||
| 1387 | + and falling back on :const:`io.DEFAULT_BUFFER_SIZE`. | ||
| 1388 | + On most systems, the buffer will typically be 131072 bytes long. | ||
| 1388 | 1389 | ||
| 1389 | 1390 | * "Interactive" text files (files for which :meth:`~io.IOBase.isatty` | |
| 1390 | 1391 | returns ``True``) use line buffering. Other text files use the policy | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -23,8 +23,8 @@ | |||
| 23 | 23 | valid_seek_flags.add(os.SEEK_HOLE) | |
| 24 | 24 | valid_seek_flags.add(os.SEEK_DATA) | |
| 25 | 25 | ||
| 26 | - # open() uses st_blksize whenever we can | ||
| 27 | - DEFAULT_BUFFER_SIZE = 8 * 1024 # bytes | ||
| 26 | + # open() uses max(st_blksize, io.DEFAULT_BUFFER_SIZE) when st_blksize is available | ||
| 27 | + DEFAULT_BUFFER_SIZE = 128 * 1024 # bytes | ||
| 28 | 28 | ||
| 29 | 29 | # NOTE: Base classes defined here are registered with the "official" ABCs | |
| 30 | 30 | # defined in io.py. We don't use real inheritance though, because we don't want | |
@@ -248,8 +248,7 @@ def open(file, mode="r", buffering=-1, encoding=None, errors=None, | |||
| 248 | 248 | except (OSError, AttributeError): | |
| 249 | 249 | pass | |
| 250 | 250 | else: | |
| 251 | - if bs > 1: | ||
| 252 | - buffering = bs | ||
| 251 | + buffering = max(bs, DEFAULT_BUFFER_SIZE) | ||
| 253 | 252 | if buffering < 0: | |
| 254 | 253 | raise ValueError("invalid buffering size") | |
| 255 | 254 | if buffering == 0: | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,4 @@ | |||
| 1 | + Increase ``io.DEFAULT_BUFFER_SIZE`` from 8k to 128k. Adjust :func:`open` on | ||
| 2 | + Linux to use ``max(io.DEFAULT_BUFFER_SIZE, device block size)`` rather than | ||
| 3 | + the device block size. Improve I/O write performance by up to 5 times. | ||
| 4 | + Patch by Romain Morotti. | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -78,7 +78,7 @@ extern Py_ssize_t _PyIO_find_line_ending( | |||
| 78 | 78 | */ | |
| 79 | 79 | extern int _PyIO_trap_eintr(void); | |
| 80 | 80 | ||
| 81 | - #define DEFAULT_BUFFER_SIZE (8 * 1024) /* bytes */ | ||
| 81 | + #define DEFAULT_BUFFER_SIZE (128 * 1024) /* bytes */ | ||
| 82 | 82 | ||
| 83 | 83 | /* | |
| 84 | 84 | * Offset type for positioning. | |
| Back | FazBrowse Home | New Git URL |
0 commit comments