I wonder why you didn't mention asynchronous programming with the async keyword.
Right now, they are the preferred way when it comes to IO-bound operations.
Anyway, the implantation of GIL is not defined by Python per se, it is just a well-known design feature of CPython. The other Python implementations are often GIL-free.