Перехватывать исключения из другого потока без изменения его кода

#python #python-3.x #multithreading #exception

Вопрос:

Я должен использовать специальную стороннюю библиотеку; она плохо разработана, но выполняет уникальные функции. Он запускает и управляет одним или несколькими потоками сам по себе, но по какой-то причине не улавливает все их исключения. И мне нужно их поймать (по крайней мере , уволить без замусоривания stderr , лучше обрабатывать с помощью пользовательского кода).

Заключать библиотечную run функцию в try блок бесполезно, потому что проблемные исключения всплывают в другом стеке.

Я знаю способы исправить это, изменив код, выполняемый в потоке библиотеки, но в моей ситуации я действительно не хочу изменять этот сторонний код. Я согласен с умеренным обманом во время выполнения, но я еще не нашел рабочего способа.

Попробовал изменить sys.excepthook , это, похоже, влияет только на поток, в котором он был изменен (т. Е. На поток приложения).

Комментарии:

1. Один из вариантов-использовать multiprocessing для изоляции среды библиотеки от приложения. Это не позволяет обрабатывать проблемные исключения, значительно усложняет архитектуру программы и плохо сказывается на производительности, но это все еще вариант.