Перехват ошибок при использовании threading.timer в качестве функции тайм-аута в python - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу использовать 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 ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...