CPython'овский GIL в общем случае не позволяет одновременно работать более чем одному треду интерпретатора. Только если тред ушёл в долгий нативный вызов, он позволяет в это время работать другим тредам. Некоторые другие интерпретаторы, например Jython, такого ограничения не имеют.
Как ты себе это представляешь? :) У них глобальные переменные, как только два потока пошли исполнять питоновский код наступает пипец. Он переключает потоки раз в 100 тиков (по дефолту).
я не хочу менеджить лок интепритатора руками, когда я пишу бингинг.
Я понял, ты хочешь чтобы питоновские функции автоматом оборачивались в локи. Я уверен что от этого отказались из-за тормозов. Для скорости блокировку нужно брать один раз на весь питонячий блок кода, а не каждый раз дёргать на каждый вызов. Как это сделать без какого-нить препроцессора непонятно.