Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
3bbb6db5
Commit
3bbb6db5
authored
Oct 24, 2019
by
Kyle Stanley
Committed by
Yury Selivanov
Oct 24, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add missing asyncio changes from 3.8 whatsnew (GH-16911)
parent
a01ba333
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
85 additions
and
10 deletions
+85
-10
Doc/whatsnew/3.8.rst
Doc/whatsnew/3.8.rst
+85
-10
No files found.
Doc/whatsnew/3.8.rst
View file @
3bbb6db5
...
...
@@ -595,6 +595,40 @@ The :func:`ast.parse` function has some new flags:
asyncio
-------
:func:`asyncio.run` has graduated from the provisional to stable API. This
function can be used to execute a :term:`coroutine` and return the result while
automatically managing the event loop. For example::
import asyncio
async def main():
await asyncio.sleep(0)
return 42
asyncio.run(main())
This is *roughly* equivalent to::
import asyncio
async def main():
await asyncio.sleep(0)
return 42
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
loop.run_until_complete(main())
finally:
asyncio.set_event_loop(None)
loop.close()
The actual implementation is significantly more complex. Thus,
:func:`asyncio.run` should be the preferred way of running asyncio programs.
(Contributed by Yury Selivanov in :issue:`32314`.)
Running ``python -m asyncio`` launches a natively async REPL. This allows rapid
experimentation with code that has a top-level :keyword:`await`. There is no
longer a need to directly call ``asyncio.run()`` which would spawn a new event
...
...
@@ -612,6 +646,10 @@ loop on every invocation:
(Contributed by Yury Selivanov in :issue:`37028`.)
The exception :class:`asyncio.CancelledError` now inherits from
:class:`BaseException` rather than :class:`Exception`.
(Contributed by Yury Selivanov in :issue:`32528`.)
On Windows, the default event loop is now :class:`~asyncio.ProactorEventLoop`.
(Contributed by Victor Stinner in :issue:`34687`.)
...
...
@@ -622,6 +660,26 @@ On Windows, the default event loop is now :class:`~asyncio.ProactorEventLoop`.
:exc:`KeyboardInterrupt` ("CTRL+C").
(Contributed by Vladimir Matveev in :issue:`23057`.)
Added :meth:`asyncio.Task.get_coro` for getting the wrapped coroutine
within an :class:`asyncio.Task`.
(Contributed by Alex Grönholm in :issue:`36999`.)
Asyncio tasks can now be named, either by passing the ``name`` keyword
argument to :func:`asyncio.create_task` or
the :meth:`~asyncio.loop.create_task` event loop method, or by
calling the :meth:`~asyncio.Task.set_name` method on the task object. The
task name is visible in the ``repr()`` output of :class:`asyncio.Task` and
can also be retrieved using the :meth:`~asyncio.Task.get_name` method.
(Contributed by Alex Grönholm in :issue:`34270`.)
Added support for
`Happy Eyeballs <https://en.wikipedia.org/wiki/Happy_Eyeballs>`_ to
:func:`asyncio.loop.create_connection`. To specify the behavior, two new
parameters have been added: *happy_eyeballs_delay* and *interleave*. The Happy
Eyeballs algorithm improves responsiveness in applications that support IPv4
and IPv6 by attempting to simultaneously connect using both.
(Contributed by twisteroid ambassador in :issue:`33530`.)
builtins
--------
...
...
@@ -1575,7 +1633,7 @@ Deprecated
* Passing an object that is not an instance of
:class:`concurrent.futures.ThreadPoolExecutor` to
:meth:`
asyncio.loop.set_default_executor()
` is
:meth:`
loop.set_default_executor() <asyncio.loop.set_default_executor>
` is
deprecated and will be prohibited in Python 3.9.
(Contributed by Elvis Pranskevichus in :issue:`34075`.)
...
...
@@ -1608,6 +1666,19 @@ Deprecated
:keyword:`async def` instead.
(Contributed by Andrew Svetlov in :issue:`36921`.)
* In :mod:`asyncio`, the explicit passing of a *loop* argument has been
deprecated and will be removed in version 3.10 for the following:
:func:`asyncio.sleep`, :func:`asyncio.gather`, :func:`asyncio.shield`,
:func:`asyncio.wait_for`, :func:`asyncio.wait`, :func:`asyncio.as_completed`,
:class:`asyncio.Task`, :class:`asyncio.Lock`, :class:`asyncio.Event`,
:class:`asyncio.Condition`, :class:`asyncio.Semaphore`,
:class:`asyncio.BoundedSemaphore`, :class:`asyncio.Queue`,
:func:`asyncio.create_subprocess_exec`, and
:func:`asyncio.create_subprocess_shell`.
* The explicit passing of coroutine objects to :func:`asyncio.wait` has been
deprecated and will be removed in version 3.10.
* The following functions and methods are deprecated in the :mod:`gettext`
module: :func:`~gettext.lgettext`, :func:`~gettext.ldgettext`,
:func:`~gettext.lngettext` and :func:`~gettext.ldngettext`.
...
...
@@ -1852,13 +1923,6 @@ Changes in the Python API
you adjust (possibly including adding accessor functions to the
public API). (See :issue:`35886`.)
* Asyncio tasks can now be named, either by passing the ``name`` keyword
argument to :func:`asyncio.create_task` or
the :meth:`~asyncio.loop.create_task` event loop method, or by
calling the :meth:`~asyncio.Task.set_name` method on the task object. The
task name is visible in the ``repr()`` output of :class:`asyncio.Task` and
can also be retrieved using the :meth:`~asyncio.Task.get_name` method.
* The :meth:`mmap.flush() <mmap.mmap.flush>` method now returns ``None`` on
success and raises an exception on error under all platforms. Previously,
its behavior was platform-dependent: a nonzero value was returned on success;
...
...
@@ -1881,8 +1945,19 @@ Changes in the Python API
(Contributed by Anthony Sottile in :issue:`36264`.)
* The exception :class:`asyncio.CancelledError` now inherits from
:class:`BaseException` rather than a :class:`Exception`.
(Contributed by Yury Selivanov in :issue:`13528`.)
:class:`BaseException` rather than :class:`Exception`.
(Contributed by Yury Selivanov in :issue:`32528`.)
* The function :func:`asyncio.wait_for` now correctly waits for cancellation
when using an instance of :class:`asyncio.Task`. Previously, upon reaching
*timeout*, it was cancelled and immediately returned.
(Contributed by Elvis Pranskevichus in :issue:`32751`.)
* The function :func:`asyncio.BaseTransport.get_extra_info` now returns a safe
to use socket object when 'socket' is passed to the *name* parameter.
(Contributed by Yury Selivanov in :issue:`37027`.)
* :class:`asyncio.BufferedProtocol` has graduated to the stable API.
.. _bpo-36085-whatsnew:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment