I heard threading is not very efficient in Python (compared to other languages).
Is this true? If so, how can a Python programmer overcome this?
One option is to use a different implementation of Python, like Jython or IronPython. That way, you still get the benefits of having the Python language without having to deal with the GIL. However, you wouldn't have the ability to use the CPython-only libraries.
Another option is to use different constructs than threads. For example, if you use Stackless Python, Tasklets are an alternative.