Без кода сложно говорить что-то конкретное.
Есть подозрение, что вы не вставляете в цикл никаких задержек. А ведь для большинства практических задач не нужно проверять что-то каждую наносекунду, можно делать, например, раз в 100 миллисекунд. А для некоторых задач и одна проверка в минуту может быть вполне адекватной частотой.
Вот этот код у меня грузит процессор на 99-100%
while True:
x = range(3)
А вот с этим процесс python3 я почти вообще не вижу в выводе команды top. Он там появляется всего несколько раз в минуту с какой-то смешной цифрой вроде 0,2 % загрузки процессора.
import time
while True:
x = range(3)
time.sleep(0.1)
Так что используйте задержки в цикле и будет вам счастье.