Я понимаю, что эта тема была неактивной в течение некоторого времени, но я столкнулся с подобной проблемой и надеюсь, что кто-то еще может найти это полезным.
Как упомянуто в полезном комментарии @jfs, стандартный модуль threading
предоставляет метод Timer
, который действительно хорошо подходит для этого ( docs ). Это просто подкласс threading.Thread
, но это делает его очень простым и понятным. Его также можно отменить, используя унаследованный метод cancel
.
import threading
delay_time = 3 # delay time in seconds
def watchdog():
print('Watchdog expired. Exiting...')
os._exit(1)
alarm = threading.Timer(delay_time, watchdog)
alarm.start()
my_potentially_never_ending_call()
alarm.cancel()