Hacker News new | ask | show | jobs
by 12_throw_away 78 days ago
No, determinstic scheduling is not a property of async python.

Yes, the stdlib asyncio event loop does have deterministic scheduling, but that's an implementation detail and I would not rely on it for anything critical. Other event loops - for instance trio [1] - explicitly randomize startup order so that you won't accidentally write code that relies on it.

[1] https://github.com/python-trio/trio/issues/32

5 comments

> but that's an implementation detail

That sounds familiar...

https://stackoverflow.com/questions/39980323/are-dictionarie...

It's been a stable (and documented) behavior of the Python standard library for almost a decade now. It's possible it may change--nothing is ever set in stone--but that would be a large change in Python that would come with plenty of warning and time for adjustment.
And then one day, Astral creates a new Python implementation in Rust or something that is way faster and all the rage, but does this particular thing different than CPython. Whoops, you can’t use that runtime, because you now have cursed parts in your codebase that produce nondeterministic behaviour you can’t really find a reason for.
and then all the serverless platforms will start using Astral's new rust-based runtime to reduce cold starts, and in theory it's identical, except half of packages now don't work and it's very hard to anticipate which ones will and will not and behold! You have achieved Deno
That's a bit what it felt like when I was learning Rust async.

I get it, but "ecosystems" of async runtimes have a pretty big cost.

If I know anything about the Python community - that new runtime would simply never gain significant traction, due to the incompatibility.
If the python core team cared about not breaking things I wouldn't need to run my tests on all versions of python.
Well, in my early days programming python I made a lot(!!) of code assuming non-concurrent execution, but some of that code will break in the future with GIL removal. Hopefully the Python devs keep these important changes as opt-ins.
How do you differentiate between something that "happens to work due to an implementation detail" and a "proper feature that's specified to work" in a language without a specification?
In a language without a spec? You don't. But python has a very strong spec.
Where?
peps.python.org
There's still documentation.
I just realized how little I know about how async event loops.
The good old Workflow XKCD matches this perfectly: https://xkcd.com/1172/