Обработка исключения в другом потоке - PullRequest
2 голосов
/ 18 декабря 2009

Каков «правильный» способ обнаружения и обработки исключения в другом потоке в Python, если код в этом другом потоке не находится под вашим контролем?

Например, допустим, вы задали функцию, для которой в качестве цели объекта threading.Thread требуется 2 параметра, но во время выполнения попытайтесь передать его 3. Модуль Thread сгенерирует исключение в другом потоке, прежде чем вы сможете попытаться поймать его.

Пример кода:

def foo(p1,p2):
    p1.do_something()
    p2.do_something()

thread = threading.Thread(target=foo,args=(a,b,c))
thread.start()

Создает исключение в другом потоке. Как бы вы обнаружили и справились с этим?

1 Ответ

3 голосов
/ 18 декабря 2009

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

def safer( func ):
    def safer(*args,**kwargs):
        try:
            return func(*args,**kwargs)
        except Exception,e:
            print "Couldn't call", func
            # do_stuff( e )
    return safer


thread = threading.Thread(target=safer(foo),args=(1,2,3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...