Well you can have race conditions in async code too. See also <https://docs.python.org/3/library/asyncio-sync.html>
I don't see the async model to be much simpler than the threaded model. Regardless how you implement it. I don't understand async nearly as well as I understand threads so I'd rather have "only threads". And this has nothing to do with performance. That said, you might want to try to combine my Malebolgia with your NimGo project.