[Python-ideas] async objects

Rene Nejsum rene at stranden.com
Sun Oct 2 09:26:07 EDT 2016


Having followed Yury Selivanov 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 <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 :-)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20161002/3a1802d0/attachment.html>


More information about the Python-ideas mailing list