Питоновскими родными средствами, емнип, этого не сделать. Нужно что-то придумывать на уровне ОС, относительно виртуальной машины python. А вот что касается вашего кода выше - руки оторвать. Говорите, хотите ядро сохранить для работы системы, а сами на месте его и выжираете бесконечным циклом без пауз.
Так что советую влепить в цикл time.sleep хотя бы на 1ms. Помнится, где-то читал про механизм, позволяющий просто отдать поток ОС (без указания задержки), до тех пор пока она не решит снова передать управление в этот поток. Но не нашел. Вероятно, это фишка из java.
А вообще попробуйте сделать, как делают все нормальные люди. Пул процессов размером на 1 меньше кол-ва ядер, а там используйте потоки. Это не гарантирует, что у вас один процесс будет работать постоянно на одном и том же ядре, но гарантирует, что параллельно не будет задействовано более n-1 ядер. В данном случае наличие потоков нас не волнует, так как есть gil, который не даст потокам одного процесса работать параллельно.