У меня есть метод, который выполняется сам раз в заданные секунды.
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, который добавляется в качестве ссылки.Я закрываю этот вопрос, так как он больше не актуален.