No, it doesn't. I/O bound tasks can heavily use multiple cores just fine using threads.
I'm intimately familiar with the limitations of python threads - and right now I'm the maintainer of the multiprocessing module, which is the process-based "reply" to the stdlib threading module.
Even cpu bound tasks can release the GIL to do processing(for non python api tasks).