I don't know Python or Rust well, but I think this is the problem:
https://betterprogramming.pub/the-dangers-of-async-in-python...
And this is how some people are solving it:
https://async.rs/blog/stop-worrying-about-blocking-the-new-a...
This is how it works in BEAM:
https://github.com/happi/theBeamBook/blob/master/chapters/sc...
The commonality is to limit execution time and yield (preempt) so something else can run too.