Если ваша программа связана с процессором в интерпретаторе, то создание нескольких потоков на самом деле замедлит результат, даже если процессоров будет достаточно для их всех. Это происходит потому, что GIL (глобальная блокировка интерпретатора) позволяет запускать в интерпретаторе одновременно только один поток.
Если большая часть работы происходит в библиотеке C, вероятно, блокировка не удерживается, и вы можете продуктивно использовать несколько потоков.
Если вы сами порождаете потоки, вам нужно убедиться, что вы не создаете слишком много - потоки 10К на одном будут плохими новостями - поэтому вам нужно будет настроить рабочую очередь, из которой читают потоки, а не просто порождать их в петле.
Если бы я делал это, я бы просто использовал стандартный многопроцессорный модуль.