Таймер потоков Python Unhandled Исключение прерывает родительский процесс - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть метод, который выполняется сам раз в заданные секунды.

def send_hb(self, time):
    logging.info('Sending hb.')
    try:
        self.send_signal() #call another function that sends a signal to a server
        threading.Timer(time, self.send_hb, (time,)).start()
    except Exception as e:
        logging.info(e)

Затем я вызываю метод следующим образом:

try:
   self.send_hb(10)
except Exception as e:
   logging.info(e)

Теперь, когда сервер, которому я посылаю сигнал,В автономном режиме я получаю

Необработанное исключение: разрыв соединения..... at Python.Runtime.Iterator.tp_iternext (IntPtr ob)

Вызов функции находится в блоке try-кроме.Все, что я выполняю, находится в блоке try-кроме, однако, когда сервер не работает, вместо того, чтобы обрабатывать исключение, я получаю это необработанное исключение, и оно нарушает основной процесс.Это убивает процесс Python.Метод send_signal также находится в блоке try-catch, но исключение не обрабатывается.Я пытался вызвать исключение, чтобы я мог его поймать, но это тоже не сработало.В тот момент, когда я комментирую метод send_hb и выключаю сервер во время работы скрипта, другие исключения обрабатывают это, и процесс просто пытается подключиться к серверу.

У меня вопрос, есть ли в этом что-тоделать с threading.Timer?Почему это не просто поток, умирающий, но он также убивает основной процесс (я думаю, из-за необработанного исключения?).Я искал способы обработки потоков, но кажется, что решения, которые я нашел, не работают в моем случае (решение waw, чтобы поместить все в блок try-кроме).

Редактировать :Я обнаружил, что проблема возникает из-за исключения, генерируемого из итератора c # (yield).По-видимому, метод send_signal использует ac # lib, который добавляется в качестве ссылки.Я закрываю этот вопрос, так как он больше не актуален.

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