Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite1f8914

Browse files
authored
gh-80050: Update BufferedReader.read docs around non-blocking (GH-130653)
1 parentc64a214 commite1f8914

File tree

1 file changed

+41
-44
lines changed

1 file changed

+41
-44
lines changed

‎Doc/library/io.rst

Lines changed: 41 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -528,14 +528,13 @@ I/O Base Classes
528528
It inherits from:class:`IOBase`.
529529

530530
The main difference with:class:`RawIOBase` is that methods:meth:`read`,
531-
:meth:`readinto` and:meth:`write` will try (respectively) to read as much
532-
input as requested or to consume all given output, at the expense of
533-
making perhaps more than one system call.
531+
:meth:`readinto` and:meth:`write` will try (respectively) to read
532+
as much input as requested or to emit all provided data.
534533

535-
In addition,those methods can raise:exc:`BlockingIOError` if the
536-
underlying raw stream is in non-blocking mode and cannot take or give
537-
enough data; unlike their:class:`RawIOBase` counterparts, theywill
538-
never return``None``.
534+
In addition,if the underlying raw stream is in non-blocking mode, when the
535+
system returns would block:meth:`write` will raise:exc:`BlockingIOError`
536+
with:attr:`BlockingIOError.characters_written` and:meth:`read`will return
537+
data read so far or``None`` if no data is available.
539538

540539
Besides, the:meth:`read` method does not have a default
541540
implementation that defers to:meth:`readinto`.
@@ -568,29 +567,40 @@ I/O Base Classes
568567

569568
..method::read(size=-1, /)
570569

571-
Read and return up to *size* bytes. If the argument is omitted, ``None``,
572-
or negative, data is read and returned until EOF is reached. An empty
573-
:class:`bytes` object is returned if the stream is already at EOF.
570+
Read and return up to *size* bytes. If the argument is omitted, ``None``,
571+
or negative read as much as possible.
574572

575-
If the argument is positive, and the underlying raw stream is not
576-
interactive, multiple raw reads may be issued to satisfy the byte count
577-
(unless EOF is reached first). But for interactive raw streams, at most
578-
one rawread will be issued,anda short result does not imply that EOF is
579-
imminent.
573+
Fewer bytes may be returned than requested. An empty:class:`bytes` object
574+
is returned if the stream is already at EOF. More than one read may be
575+
made and calls may be retried if specific errors are encountered, see
576+
:meth:`os.read`and:pep:`475` for more details. Less than size bytes
577+
being returned does not imply that EOF isimminent.
580578

581-
A:exc:`BlockingIOError` is raised if the underlying raw stream is in
582-
non blocking-mode, and has no data available at the moment.
579+
When reading as much as possible the default implementation will use
580+
``raw.readall`` if available (which should implement
581+
:meth:`RawIOBase.readall`), otherwise will read in a loop until read
582+
returns ``None``, an empty:class:`bytes`, or a non-retryable error. For
583+
most streams this is to EOF, but for non-blocking streams more data may
584+
become available.
585+
586+
..note::
587+
588+
When the underlying raw stream is non-blocking, implementations may
589+
either raise:exc:`BlockingIOError` or return ``None`` if no data is
590+
available.:mod:`io` implementations return ``None``.
583591

584592
..method::read1(size=-1, /)
585593

586-
Read and return up to *size* bytes, with at most one call to the
587-
underlying raw stream's:meth:`~RawIOBase.read` (or
588-
:meth:`~RawIOBase.readinto`) method. This can be useful if you are
589-
implementing your own buffering on top of a:class:`BufferedIOBase`
590-
object.
594+
Read and return up to *size* bytes, calling:meth:`~RawIOBase.readinto`
595+
which may retry if:py:const:`~errno.EINTR` is encountered per
596+
:pep:`475`. If *size* is ``-1`` or not provided, the implementation will
597+
choose an arbitrary value for *size*.
591598

592-
If *size* is ``-1`` (the default), an arbitrary number of bytes are
593-
returned (more than zero unless EOF is reached).
599+
..note::
600+
601+
When the underlying raw stream is non-blocking, implementations may
602+
either raise:exc:`BlockingIOError` or return ``None`` if no data is
603+
available.:mod:`io` implementations return ``None``.
594604

595605
..method::readinto(b, /)
596606

@@ -767,34 +777,21 @@ than raw I/O does.
767777

768778
..method::peek(size=0, /)
769779

770-
Return bytes from the stream without advancing the position. At most one
771-
single read on the raw stream is done to satisfy thecall. The number of
772-
bytes returned may be less or more than requested.
780+
Return bytes from the stream without advancing the position.The number of
781+
bytes returned may be less or more than requested. If theunderlying raw
782+
stream is non-blocking and the operation would block, returns empty bytes.
773783

774784
..method::read(size=-1, /)
775785

776-
Read and return *size* bytes, or if *size* is not given or negative, until
777-
EOF or if the read call would block in non-blocking mode.
778-
779-
..note::
780-
781-
When the underlying raw stream is non-blocking, a:exc:`BlockingIOError`
782-
may be raised if a read operation cannot be completed immediately.
786+
In:class:`BufferedReader` this is the same as:meth:`io.BufferedIOBase.read`
783787

784788
..method::read1(size=-1, /)
785789

786-
Read and return up to *size* bytes with only one call on the raw stream.
787-
If at least one byte is buffered, only buffered bytes are returned.
788-
Otherwise, one raw stream read call is made.
790+
In:class:`BufferedReader` this is the same as:meth:`io.BufferedIOBase.read1`
789791

790792
..versionchanged::3.7
791793
The *size* argument is now optional.
792794

793-
..note::
794-
795-
When the underlying raw stream is non-blocking, a:exc:`BlockingIOError`
796-
may be raised if a read operation cannot be completed immediately.
797-
798795
..class::BufferedWriter(raw, buffer_size=DEFAULT_BUFFER_SIZE)
799796

800797
A buffered binary stream providing higher-level access to a writeable, non
@@ -826,8 +823,8 @@ than raw I/O does.
826823

827824
Write the:term:`bytes-like object`, *b*, and return the
828825
number of bytes written. When in non-blocking mode, a
829-
:exc:`BlockingIOError`is raised if the buffer needs to be written out but
830-
the raw stream blocks.
826+
:exc:`BlockingIOError`with:attr:`BlockingIOError.characters_written` set
827+
is raised if the buffer needs to be written out butthe raw stream blocks.
831828

832829

833830
..class::BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp