[Python-ideas] async objects

MRAB python at mrabarnett.plus.com
Mon Oct 3 11:59:32 EDT 2016


On 2016-10-03 16:46, Yann Kaiser wrote:
> The way I see it, the great thing about async/await as opposed to
> threading is that it is explicit about when execution will "take a
> break" from your function or resume into it. This is made clear and
> readable through the use of `await` keywords.
>
> Your proposal unfortunately goes directly against this idea of
> explicitness. You won't know what function will need to be fed into an
> event loop or not. You won't know where your code is going to lose or
> gain control.
>
Could we turn this around the other way and allow the use of 'await' in 
both cases, checking at runtime whether it needs to behave 
asynchronously or not?

> On Sun, Oct 2, 2016, 14:26 Rene Nejsum <rene at stranden.com
> <mailto:rene at stranden.com>> wrote:
>
>     Having followed Yury Selivanov yselivanov.ml <http://yselivanov.ml>
>     at gmail.com <http://gmail.com> proposal to add async/await to
>     Python  (PEP 492 Coroutines with async and await syntax and (PEP 525
>      Asynchronous Generators) and and especially the discussion about
>     PEP 530: Asynchronous Comprehensions  I would like to add some
>     concerns about the direction Python is taking on this.
>
>     As Sven R. Kunze srkunze at mail.de <http://mail.de> mentions the is
>     a risk of having to double a lot of methods/functions to have an
>     Async implementation. Just look at the mess in .NET  when Microsoft
>     introduced async/await in their library, a huge number of functions
>     had to be implemented with a Async version of each member.
>     Definitely not the DRY principle.
>
>     While I think parallelism and concurrency are very important
>     features in a language, I feel the direction Python is taking right
>     now is getting to complicated, being difficult to understand and
>     implement correct.
>
>     I thought it might be worth to look at using async at a higher
>     level. Instead of making methods, generators and lists async, why
>     not make the object itself async? Meaning that the method call
>     (message to object) is async
>
>     Example:
>
>     class SomeClass(object):
>        def some_method(self):
>            return 42
>
>     o = async SomeClass()  # Indicating that the user want’s an async
>     version of the object
>     r = o.some_method()    # Will implicit be a async/await “wrapped”
>     method no matter impl.
>     # Here other code could execute, until the result (r) is referenced
>     print r
>
>     I think above code is easier to implement, use and understand, while
>     it handles some of the use cases handled by defining a lot of
>     methods as async/await.
>
>     I have made a small implementation called PYWORKS
>     (https://github.com/pylots/pyworks), somewhat based on the idea
>     above. PYWORKS has been used in several real world implementation
>     and seams to be fairly easy for developers to understand and use.
>
>     br
>     /Rene
>
>     PS. This is my first post to python-ideas, please be gentle :-)
>



More information about the Python-ideas mailing list