Есть ли способ заставить родительский элемент, который породил новый поток, перехватить исключение порожденных потоков? Ниже приведен реальный базовый пример того, что я пытаюсь достичь. Он должен перестать считать, когда возникает исключение, но я не знаю, как его поймать. Являются ли исключения потокобезопасными? Я хотел бы иметь возможность использовать модуль Subprocess
, но я застрял на Python 2.3 и не знаю, как еще это сделать. Возможно, используется модуль threading
?
import time
import thread
def test():
try:
test = thread.start_new_thread(watchdog, (5,))
count(10)
except:
print('Stopped Counting')
def count(num):
for i in range(num):
print i
time.sleep(1)
def watchdog(timeout):
time.sleep(timeout)
raise Exception('Ran out of time')
if __name__ == '__main__':
test()
ОБНОВЛЕНИЕ
Мой исходный код немного вводил в заблуждение. На самом деле он ищет что-то вроде этого:
import time
import thread
import os
def test():
try:
test = thread.start_new_thread(watchdog, (5,))
os.system('count_to_10.exe')
except:
print('Stopped Counting')
def watchdog(timeout):
time.sleep(timeout)
raise Exception('Ran out of time')
if __name__ == '__main__':
test()
Я пытаюсь создать сторожевой таймер, чтобы прервать вызов os.system, если программа по какой-то причине зависает.