Asyncio -- delayed calculation
Marko Rauhamaa
marko at pacujo.net
Fri Dec 2 09:19:29 EST 2016
Steve D'Aprano <steve+python at pearwood.info>:
> py> await x
> File "<stdin>", line 1
> await x
> ^
> SyntaxError: invalid syntax
"await" is only allowed inside a coroutine.
> So why do we need asyncio? What is it actually good for?
Asyncio is a form of cooperative multitasking. It presents a framework
of "fake threads". The objective and programming model is identical to
that of threads.
As to why Python should need a coroutine framework, you can answer it
from two angles:
1. Why does one need cooperative multitasking?
2. Why should one use coroutines to implement cooperative
multitasking?
1. Cooperative multitasking has made its way in Java ("NIO") and C#
(async/await). It has come about as enterprise computing realized the
multithreading model of the 1990's was shortsighted. In particular, it
wasn't scalable. Enterprise solutions collapsed under the weight of tens
of thousands of threads. Stack space ran out and schedulers became slow.
<URL: https://en.wikipedia.org/wiki/C10k_problem>
2. I have always been into asynchronous programming (cooperative
multitasking), but coroutines are far from my favorite programming
model. I am guessing Guido introduced them to Python because:
* C# has them (me too!).
* They have a glorious computer scientific past (CSP, emperor's new I/O
framework).
* They look like threads.
* They were already there in the form of generators (low-hanging
fruit).
And, maybe most importantly:
* Twisted (et al) had needed an event-driven framework but Python
didn't have one out of the box (<URL:
https://lwn.net/Articles/692254/>).
Marko
More information about the Python-list
mailing list