5 ms·
How async/await works in Python 3.5
- JonathonW 11y agoNice-- I've found async/await really useful in C#/.NET and didn't realize it was making its way into Python (I'm still mostly writing Python 2.7 code here for availability reasons). A little disappointed that it doesn't look like there's really support for it in the standard library's networking packages, though... hopefully more will be coming in 3.6 or 3.7?
- pixelmonkey 11y agoLots of pretty good aio libraries are being developed openly on Github in this organization: https://github.com/aio-libs https://github.com/aio-libs This includes lots of network libraries and database clients.
- tpetricek 11y agoThe fun thing is that you could do the same thing in C# before async/await :-). http://tomasp.net/blog/csharp-async.aspx/ http://tomasp.net/blog/csharp-async.aspx/
- brettcannon 11y agoC# a actually inspired Python's implementation. Python historically takes ideas from other languages and refines them to Python's style.
- brettcannon 11y agoThe way the standard library is managed in terms of new things is it needs to be proved in the community for a year or more before we consider adding it. Since async is so new it's a bit early to get be changing things until we see how the community chooses to approach this new style of programming.
- Klasiaster 11y agoSo it seems it would be able to have goless in python3 with this? The combination of spawning a function and using channels between them is great. Specially the optional numeric argument of chan() where you can specify whether it's blocking or not, having a send buffer etc. Using an event loop with async/await could work nicely. Or also a version using real threads instead. https://goless.readthedocs.org/en/latest/ https://goless.readthedocs.org/en/latest/
- Klasiaster 11y agoAh, found a https://github.com/stuglaser/pychan https://github.com/stuglaser/pychan which could be used with threads.
- Klasiaster 11y agoIt looks different than in Go, but works the same (when simulating a handshake for synchronous channels). #!/usr/bin/env python3.5 import asyncio async def give(start, end, c, k): for i in range(start, end): await c.put(i) await k.get() # sync send await c.put(None) # simulate closing of channel async def consume(c, k): while True: x = await c.get() await k.put(True) # sync recv if x is None: # channel closed return print(x) loop = asyncio.get_event_loop() c, k = asyncio.Queue(), asyncio.Queue() tasks = [asyncio.ensure_future(give(3, 7, c, k)), asyncio.ensure_future(consume(c, k))] try: loop.run_until_complete(asyncio.wait(tasks)) finally: loop.close()
- scrollaway 11y agoThis is such a good blog post. Thank you for writing it.
- brettcannon 11y agoWelcome! Glad you liked it.