If I understand correctly asyncio, coroutines, etc. (and, of course,
Threads) are not simultaneously executed, and that if one wants that one
must still use multiprocessing. But I'm not sure. The note is still
there at the start of threading, so I'm pretty sure about that one.
The requirement that coroutines always be awaited seems to confirm this,
but doesn't really say so explicitly. And the concurrent.futures can
clearly be either, depending on your choices, but the chart in
18.5.3.1.3 Example: Chain coroutines is of a kind that I am more
familiar with in the context of multiprocessing. (E.g., the only gap in
the chart, which extends across all headings is when a result is being
waited for during a sleep.) For threaded execution I would expect there
to be a gap whenever processing is shifted from one column to another.
If someone has authority to edit the documentation a comment like:
If you want your application to make better use of the computational
resources of multi-core machines, you are advised to use multiprocessing
<https://docs.python.org/3.5/library/multiprocessing.html#module-multiprocessing>
or concurrent.futures.ProcessPoolExecutor
<https://docs.python.org/3.5/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor>.
However, threading is still an appropriate model if you want to run
multiple I/O-bound tasks simultaneously.
(to quote from the threading documentation) would be helpful at or very
near the top of each of the appropriate modules. It would also be
useful if the modules that were definitely intended to result in
simultaneous execution, when feasible, were so marked quite near the top.
OTOH, I may be mistaken about coroutines. I haven't been able to tell.
P.S.: I do note that the threading comment was a "*CPython
implementation detail:"*, and not a part of the Python specifications.
But CPython is, I believe, a sufficiently dominant implementation that
such details are quite important.
--
https://mail.python.org/mailman/listinfo/python-list