Я хочу использовать threading.Timer()
, чтобы добавить тайм-аут к вызову API, чтобы, если это занимает слишком много времени, программа просто переходит к следующему вызову API. У меня есть часть поднятия исключения - мой код запускает таймер, а затем поднимает TimeoutError
, когда таймер заканчивается. Тем не менее, этот TimeoutError
не перехватывается попыткой, за исключением блока, который я вставил, вместо этого он просто выводится на консоль, и код продолжает работать.
import threading
def timeout_handler():
raise TimeoutError
for a in list_of_a:
T = threading.Timer(120.0, timeout_handler)
T.start()
try:
response = LongFunctionThatMightTimeOut(a)
print(response)
except TimeoutError:
print("LongFunction timed out.")
finally:
T.cancel()
print(a+"\n")
Как мне получить Python для поймать TimeoutError
в основном коде вместо того, чтобы найти его в потоке Timer, чтобы я мог выполнить другой код и двигаться дальше?
Мне известен этот вопрос , но он применяется к самокодированному альтернативному потоку, а не к альтернативному потоку, созданному функцией timer (). Я не знаю, как применить все это к потоку, созданному Timer ().