Если вам нужен пассивный цикл, в духе "ждём ввода, ввели exit - останавливаемся, иначе что-то делаем и снова ждём", то решение выше подойдёт.
Если вам нужен активный цикл, который что-то делает пока пользователь ничего не ввёл, то input() не подойдёт.
Можно соорудить что-то с потоками:
1. главный поток запускает второй поток, который выполняет тело цикла
2. главный поток уходит в input()
3. по выходу из input() посылаем сигнал второму потоку остановиться и делаем join(), чтобы дождаться его.