[Python-Dev] provisional status for asyncio

Victor Stinner victor.stinner at gmail.com
Fri Aug 28 11:01:24 CEST 2015


2015-08-27 23:15 GMT+02:00 Yury Selivanov <yselivanov.ml at gmail.com>:
> Recently, in an asyncio related issue [1], Guido said that new features
> for asyncio have to wait till 3.6, since asyncio is no longer a provisional
> package. (...)
> For example, there is an issue [2] to add starttls support to asyncio.
> (...)
> Aside from adding new APIs, we also have to improve debugging
> capabilities.
> (...)

I would propose something more radical: remove asyncio from the stdlib.

PEP 411: "While it is considered an unlikely outcome, such packages
*may even be removed* from the standard library without a deprecation
period if the concerns regarding their API or maintenance prove

As an asyncio developer, I'm not sure that asyncio fits well into the
Python stdlib. The release cycle of feature release is long (18
months? or more?), the release cycle for bugfix release is sometimes
also too long (1 month at least). It's also frustrating to have subtle
API differences between Python 3.3, 3.4 and 3.5. For example,
asyncio.JoinableQueue was removed in Python 3.5, asyncio.Queue can
*now* be used instead, but asyncio.JoinableQueue should be used on
older Python version... It means that you have to write different code
depending on your Python version to support all Python versions.

I can give much more examples of missing asyncio features. Example:
Windows proactor event loop doesn't support signals (CTRL+C) nor UDP.

asyncio is moving so fast, that changes are not documented at all in
Misc/NEWS or Doc/whatsnews/x.y.rst. I tried to document changes in my
fork Trollius. See its changelog to have an idea how fast asyncio is
still changing:

I don't know how users will react to the removal of asyncio from the
stdlib ("asyncio is not trusted/supported by Python?").

The idea is to install it using pip: "pip install asyncio". The major
difference is that "pip install -U asyncio" allows to retrieve the
latest asyncio version, independently of your Python version. Hum, I
don't know if it works with Python 3.4 (which "asyncio" module is used
in this case?).

Developing asyncio only on Github would avoid the risk of having
patches temporary only in Github or only in CPython. It avoids the
need to synchronize the Git (Github) and Mercurial (CPython)

Compare Python release dates with Twisted, Tornado and eventlet release dates.

Twisted releases:

* 2015-01-30: 15.0.0
* 2015-04-13: 15.1.0
* 2015-05-19: 15.2.0
* 2015-08-04: 15.3.0

Tornado releases:

* 2014-07-15: 4.0
* 2015-02-07: 4.1
* 2015-05-27: 4.2
* 2015-07-17: 4.2.1

eventlet releases:

* 2015-02-25: 0.17.1
* 2015-04-03: 0.17.2
* 2015-04-09: 0.17.3
* 2015-05-08: 0.17.4


More information about the Python-Dev mailing list