Question though: asyncio is implemented as threads, which is where the GIL chokes, right?
asyncio is _not_ implemented as threads. It has features where it can wrap a sync function inside a thread in order to turn it into an async function, but if you just write "normal" async code, all your code is running in a single thread.