Можно попробовать multiprocessing.
Из-за ограничений GIL, threading, по факту, на процессоре выполняется всё равно по очереди. Лучшее его применение - это использование для запросов к внешнему источнику, и не дожидаясь ответа он сразу начинает новый процесс.