5 ms·
> Async just makes that simpler to read and write. Really? I definitely had a huge struggle reading async python, because generators and yields break the conc
by throwawaymaths 4y ago
> Async just makes that simpler to read and write.
Really? I definitely had a huge struggle reading async python, because generators and yields break the concept of "what is a function" and struggled writing async python because of function coloring.
- andrewstuart 4y agoDay to day Python async should be using generators and yields.
- nine_k 4y agoGenerators are great for predictable concurrency. Things like asynchronous I/O, with timeouts and stuff, require more support on the language and stdlib level.
- dekhn 4y agoI am really not a fan of generators and yields for the same reason. But over time I've come to see it as ever-so-slightly more elegant syntax sugar for a class that maintains internal state to sequentially return specific values in response to a series of calls to a function.
- throwawaymaths 4y agoThe least they could have done is sugared it to something that isn't "def", like "gen" or "defgen"
- jborean93 4y agoUnless I'm misunderstanding your comment they do, it's `async def` to denote a coroutine.
- dekhn 4y agoThey're referring to generator functions. A generator function typically open a resource and then use a for loop to read (for example) a line at a time and yield it. once you yield, control returns to the caller (like a return) but subsequent calls to next on the returned expression pick back up at the yield point. So function calls maintain state-behind-the-scenes. It's not just a simple call-and-return model anymore. To me this violates a core principle: the principle of least surprise. It completely changes how I have to reason about function execution, especially if there are conditionals and different yields.
- nicwolff 4y agoIt's the buried `yield` in a loop somewhere, magically changing your function into a generator, that can be confusing – it's on the original coder to have the docstring say `"""Generator yielding records from DB."""` or something.