#python #python-3.x #multithreading #exception
Вопрос:
Я должен использовать специальную стороннюю библиотеку; она плохо разработана, но выполняет уникальные функции. Он запускает и управляет одним или несколькими потоками сам по себе, но по какой-то причине не улавливает все их исключения. И мне нужно их поймать (по крайней мере , уволить без замусоривания stderr
, лучше обрабатывать с помощью пользовательского кода).
Заключать библиотечную run
функцию в try
блок бесполезно, потому что проблемные исключения всплывают в другом стеке.
Я знаю способы исправить это, изменив код, выполняемый в потоке библиотеки, но в моей ситуации я действительно не хочу изменять этот сторонний код. Я согласен с умеренным обманом во время выполнения, но я еще не нашел рабочего способа.
Попробовал изменить sys.excepthook
, это, похоже, влияет только на поток, в котором он был изменен (т. Е. На поток приложения).
Комментарии:
1. Один из вариантов-использовать
multiprocessing
для изоляции среды библиотеки от приложения. Это не позволяет обрабатывать проблемные исключения, значительно усложняет архитектуру программы и плохо сказывается на производительности, но это все еще вариант.