Вы должны увидеть, но возможно, что time.sleep() ломается, когда ваша машина переходит в режим сна.
Это ломается, когда происходит что-то другое, например KeyboardInterrupt.
Итак, поставьте sleep() в оператор try и используйте time.clock() или time.time(), чтобы узнать, сколько времени прошло между перерывом сна() и последующим возникновением продолжения цикла для продолжения сна, или просто оставьте это прервано:
try: time.sleep(360)
except: pass
Итак, программа должна продолжаться без каких-либо ошибок.
Но если это не так просто, вам придется использовать сигналы и/или управление услугами, чтобы ОС сообщила вам о том, что он должен продолжать работать или запускать процедуру сна (спать в смысле выхода из системы, не фактический сон петли).
См., Когда ОС хочет выйти или выключиться, или перейдет в режим сна, он отправит уведомление в виде какого-либо события, сигнала или паузы в обслуживании. Сон, несколько конкретный, и это может быть не так на всех ОС.
Вы должны поймать это и сделать с ним что-то полезное.
Сигналы управлять с помощью сигнального модуля,
события конкретной системы, и это может быть сложным. на Mac OS X это может быть что угодно: от события высокого уровня в AppScript или очереди событий или от сообщения MacPort, которое усложняет ситуацию, но API-интерфейсы там не беспокоятся.
В Windows вам, вероятно, придется использовать модуль wininstypes winservice для создания полезного управления сервисами.
Обратите внимание, что когда ОС переходит на остановку или выходит из системы, она посылает сигналы процессам. Если процесс не отвечает и уходит, он обычно спрашивает пользователя, должен ли он выйти из него или просто убивает процесс.
Итак, вы должны зарегистрировать свой процесс соответственно, чтобы он не прерывался, то есть он должен быть службой или демоном.
Для решения проблем возврата из спящего режима было бы лучше использовать threading.Timer() для выполнения вашей работы.
Это поток, который вызывается функцией, которую вы регистрируете по истечении указанного времени.
Перед тем, как запустить его, вы переключите его режим на daemon и оставите основной цикл для регистрации событий или сигналов или чего-то еще.
Когда пройдет время, ваша функция будет запущена. Затем вы можете уведомить главный цикл, чтобы остановить другую обработку и выполнить свою работу.
Если петля обнаруживает возврат из сна или вход в систему, он может вызвать вашу функцию напрямую и перезапустить таймер.
Когда вы повесите все это, это легко, не волнуйтесь. Просто прочитать. : D
Может быть много других решений.
Как автоматический запуск небольшого процесса при входе в систему, в котором говорится о вашем процессе, что он должен что-то делать и т. Д. И т. Д. Теперь все зависит от вашего творчества.
Какая ОС вы используете? Если бы его Mac OS X или Linux каким-то образом я предложил бы использовать Crontab вместо – SAMO
Так как «realtime» имеет перегруженное значение, я бы предложил перефразировать это «настенное время часов» или «абсолютное время». – deceze
В модульном времени у вас есть time.clock(), который вы могли бы использовать в другом цикле while. – Sosel