[Python-Dev] async/await in Python; v2
Yury Selivanov
yselivanov.ml at gmail.com
Thu Apr 23 17:32:33 CEST 2015
Hi Wolfgang,
On 2015-04-23 8:27 AM, Wolfgang Langner wrote:
> On Thu, Apr 23, 2015 at 12:35 PM, Paul Sokolovsky <pmiscml at gmail.com> wrote:
>
>> Hello,
>>
>> On Thu, 23 Apr 2015 12:18:51 +0300
>> Andrew Svetlov <andrew.svetlov at gmail.com> wrote:
>>
>> []
>>
>>>> 3.
>>>> async with and async for
>>>> Bead idea, we clutter the language even more and it is one more
>>>> thing every newbie could do wrong.
>>>> for x in y:
>>>> result = await f()
>>>> is enough, every 'async' framework lived without it over years.
>>> async for i in iterable:
>>> pass
>>>
>>> is not equal for
>>>
>>> for fut in iterable:
>>> i = yield from fut
>> But people who used Twisted all their life don't know that! They just
>> know that "async for" is not needed and bad.
>>
>>
> I don't think it is bad nor not needed, but the syntax is not beautiful and
> for the 90% not doing async stuff irritating and one more thing to learn
> and do right/wrong.
There is no way to do things wrong in PEP 492. An object
either has __aiter__ or it will be rejected by async for.
An object either has __aenter__ or it will be rejected by
async with.
transaction = yield from connection.transaction()
try:
...
except:
yield from transaction.rollback()
else:
yield from transaction.commit()
is certainly more irritating than
async with connection.transcation():
...
>
> I had also a need for async loop. But there are other solutions like
> channels,
> not needing a new syntax.
>
> Also possible a function returning futures and yield in the loop with a
> sentinel.
>
> All this goes the road down to a producer consumer pattern. Nothing more.
>
>
>
>> I know I'm a bad guy to make such comments, too bad there's a bit of
>> truth in them, or everyone would just call me an a%$&ole right away.
>>
>>
>> Generally, I already provided feedback (on asyncio list) that asyncio
>> is based not on native Python concepts like a coroutine, but on
>> foreign concurrency concepts like callback or Future, and a coroutine
>> is fitted as a second-class citizen on top of that. I understand why
>> that was done - to not leave out all those twisteds from a shiny new
>> world of asyncio, but sometimes one may wonder if having a clear cut
>> would've helped (compat could then have been added as a clearly separate
>> subpackage, implemented in terms of coroutines). Now people coming from
>> non-coroutine frameworks who were promised compatibility see "bad"
>> things in asyncio (and related areas), and people lured by a promise of
>> native Python framework see bad things too.
>>
>>
> This has nothing to do with people using twisted or other async frameworks
> like tornado.
> I think a coroutine should be first class. But all this should be done in a
> way a beginner
> can handle and not design this stuff for experts only.
I think that most of async frameworks out there are for
experts only. Precisely because of 'yield from', 'yield',
inlineCallbacks, '@coroutine', channels and other stuff.
PEP 492 will make it all easier. And Twisted can use
its features too.
> If we do this we
> scare away new people.
It doesn't scare away anyone. async/await were the most
awaited features in dart and javascript. One of the most
popular features in c#.
Yury
More information about the Python-Dev
mailing list