Я предполагаю, что у вас есть процессор с 8 виртуальными ядрами (возможно, четырехъядерный с гиперпоточностью)? Это означает, что один полностью загруженный поток ЦП / виртуальное ядро равен 12,5% общей нагрузки.
Интерпретатор Python - это приложение, которое по умолчанию выполняется только как один процесс и поэтому не может использовать более одного виртуального ядра. Даже если код, который вы запускаете, использует многопоточность, он все равно будет использовать только один поток ЦП / виртуальное ядро из-за GIL (глобальной блокировки интерпретатора) .
Только если ваша программа на Python использует многопроцессорную обработку , которая фактически запускает несколько экземпляров интерпретатора Python и позволяет им выполнять ваши задачи действительно параллельно, вы можете использовать преимущества нескольких виртуальных ядер / потоков ЦП. (Как отметил @SargeBorsch в своем комментарии, есть также несколько продвинутых способов добиться этого без многопроцессорной обработки, но обычно это не то, что вы сами быстро пишете.)