После того, как выполнение кода завершается, тред умирает сам - уничтожать его не нужно. Однако, иногда возникает необходимость прибить тред извне, не дожидаясь окончания выполнения кода. Но тут, к сожалению, оказывается, что в питоновском threading этого сделать нельзя
http://docs.python.org/lib/module-threading.html: documentation
currently, there are no priorities, no thread groups, and threads cannot be destroyed, stopped, suspended, resumed, or interrupted
В этом случае нужно поступать так, как предложил redixin.
Код же вполне корректен (во всяком случае, мне он кажется вполне таковым =), за исключением двух вещей - метод launch_all использует неинициализированную переменную taskName. А второе - это моя прореха - в методе Launcher.launch нужно запускать метод execute таким образом:
threading.Thread(target=self.taskDict.execute).start()
а не
threading.Thread(target=self.taskDict.execute())