Самое простое - использовать глобальную переменную и изменять её во втором потоке, который после изменения вызывает time.sleep(3600) и засыпает на час.
Ну или можно вычислять время, которое прошло между итерациями цикла, прибавлять его к общему, и когда она станет больше либо равно часу, прибавлять к num единицу и обнулять счётчик времени
на каждой итерации цикла смотри текущее время и сравнивай его с сохраненным в переменной временем запуска, как только разница станет больше требуемого периода изменяй значение своей переменной и сохрани как то этот факт, чтобы последующая итерация не сделала это еще раз (для этого можно либо использовать еще одну переменную типа boolean либо выбрать какое то значение для переменной, в которой хранишь время запуска цикла.. например None