Вообще-то для этого обычно используется ThreadPool.
Идея следующая: создания потока занимает много времени.
Можно сделать сразу несколько потоков, которые ждут работы.
В ThreadPool отправляется задача (обычный callable подойдет).
Она подхватывается первым свободным потоком. Вторая - вторым свободным.
Когда свободных нет - ставится в очередь.
Освобождается рабочий поток - берется задача из очереди, если есть.
Если нет - поток переводится в ждущий режим.
И т.д.
Простейший пример -
ASPN Python Cookbook.
Более красивые и полезные реализации -
здесь, например, или
здесь.
Короткое описание - на
wikipedia.