Зачем вам так много сложности, чтобы выполнять какое-то задание каждый час? Вы можете запускать скрипт каждый час следующим образом, помните, что он выполняется 1 час + время на выполнение работы:
import time
def do_some_work():
print("Do some work")
time.sleep(1)
print("Some work is done!")
if __name__ == "__main__":
time.sleep(60) # imagine you would like to start work in 1 minute first time
while True:
do_some_work()
time.sleep(3600) # do work every one hour
Если вы хотите запускать скрипт точно каждый час, выполните следующий код:
import time
import threading
def do_some_work():
print("Do some work")
time.sleep(4)
print("Some work is done!")
if __name__ == "__main__":
time.sleep(60) # imagine you would like to start work in 1 minute first time
while True:
thr = threading.Thread(target=do_some_work)
thr.start()
time.sleep(3600) # do work every one hour
В этом случае thr должен завершить свою работу быстрее, чем 3600 секунд, хотя это не так, вы все равно получите результаты, но результаты будут получены с другой попытки, см. Пример ниже:
import time
import threading
class AttemptCount:
def __init__(self, attempt_number):
self.attempt_number = attempt_number
def do_some_work(_attempt_number):
print(f"Do some work {_attempt_number.attempt_number}")
time.sleep(4)
print(f"Some work is done! {_attempt_number.attempt_number}")
_attempt_number.attempt_number += 1
if __name__ == "__main__":
attempt_number = AttemptCount(1)
time.sleep(1) # imagine you would like to start work in 1 minute first time
while True:
thr = threading.Thread(target=do_some_work, args=(attempt_number, ),)
thr.start()
time.sleep(1) # do work every one hour
Результат, который вы получите в этом случае:
Сделайте некоторую работу 1 Сделайте некоторую работу 1 Сделайте некоторую работу 1 Сделайте некоторую работу 1 Некоторая работа выполнена! 1 Проделайте определенную работу 2 Проделайте определенную работу! 2 Проделайте определенную работу 3 Проделайте определенную работу! 3 Проделайте определенную работу 4 Проделайте определенную работу! 4 Проделайте определенную работу 5 Проделайте определенную работу! 5 Проделайте некоторую работу 6 Проделайте определенную работу! 6 Проделайте определенную работу 7 Проделайте определенную работу! 7 Проделайте определенную работу 8 Проделайте определенную работу! 8 Выполните некоторую работу 9
Мне нравится использовать подпроцесс. Откройте для таких задач, если дочерний подпроцесс не завершил свою работу в течение одного часа по какой-либо причине, вы просто завершаете его и запускаете новый.
Вы также можете использовать CRON, чтобы планировать запуск некоторых процессов каждый час.