Skip to content

bpo-33649: Polish asyncio subprocess and sync docs #9285

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Sep 14, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions Doc/library/asyncio-subprocess.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ Creating Subprocesses

The *limit* argument sets the buffer limit for :class:`StreamReader`
wrappers for :attr:`Process.stdout` and :attr:`Process.stderr`
(if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr*
arguments).
(if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments).

Return a :class:`~asyncio.subprocess.Process` instance.

Expand All @@ -78,15 +77,14 @@ Creating Subprocesses

The *limit* argument sets the buffer limit for :class:`StreamReader`
wrappers for :attr:`Process.stdout` and :attr:`Process.stderr`
(if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr*
arguments).
(if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments).

Return a :class:`~asyncio.subprocess.Process` instance.

See the documentation of :meth:`loop.subprocess_shell` for other
parameters.

.. note::
.. important::

It is the application's responsibility to ensure that all whitespace and
metacharacters are quoted appropriately to avoid `shell injection
Expand All @@ -98,7 +96,8 @@ Creating Subprocesses
.. note::

The default event loop that asyncio is pre-configured
to use on **Windows** does not support subprocesses.
to use on **Windows** does not support subprocesses. Subprocesses are
available for Windows if the :class:`ProactorEventLoop` is used.
See :ref:`Subprocess Support on Windows <asyncio-windows-subprocess>`
for details.

Expand Down Expand Up @@ -206,7 +205,7 @@ communicate with them.
exception is ignored. This condition occurs when the process
exits before all data are written into *stdin*.

If its desired to send data to the process' *stdin*,
If it is desired to send data to the process' *stdin*,
the process needs to be created with ``stdin=PIPE``. Similarly,
to get anything other than ``None`` in the result tuple, the
process has to be created with ``stdout=PIPE`` and/or
Expand Down Expand Up @@ -265,8 +264,8 @@ communicate with them.
Use the :meth:`communicate` method rather than
:attr:`process.stdin.write() <stdin>`,
:attr:`await process.stdout.read() <stdout>` or
:attr:`await process.stderr.read <stderr>`
to avoid deadlocks due to streams pausing reading or writing
:attr:`await process.stderr.read <stderr>`.
This avoids deadlocks due to streams pausing reading or writing
and blocking the child process.

.. attribute:: pid
Expand Down
8 changes: 4 additions & 4 deletions Doc/library/asyncio-sync.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ those of the :mod:`threading` module with two important caveats:
be used for OS threads synchronization (use :mod:`threading` for
that);

* methods of synchronization objects do not accept the *timeout*
* methods of synchronization primitives do not accept the *timeout*
argument; use the :func:`asyncio.wait_for` function to perform
operations with timeouts.

asyncio has the following basic primitives:
asyncio has the following basic sychronization primitives:

* :class:`Lock`
* :class:`Event`
Expand Down Expand Up @@ -72,7 +72,7 @@ Lock

When the lock is *locked*, reset it to *unlocked* and return.

If the lock is *unlocked* a :exc:`RuntimeError` is raised.
If the lock is *unlocked*, a :exc:`RuntimeError` is raised.

.. method:: locked()

Expand All @@ -97,7 +97,7 @@ Event
Example::

async def waiter(event):
print('waiting ...')
print('waiting for it ...')
await event.wait()
print('... got it!')

Expand Down