Запуск отладчика при ошибках в потоках

Я использую следующий трюк, чтобы запустить отладчик при ошибке Автоматически запускать отладчик python при ошибке

Любая идея, как это сделать, также работает для ошибок, возникающих во вновь созданных потоках? Я использую пул потоков, что-то вроде http://code.activestate.com/recipes/577187-python-thread-pool/

Ответы

Ответ 1

Я бы сказал, вводят этот код в начале каждого Thread run().

Если вы не хотите изменять этот код, вы можете сделать monkeypatch, например. например:

Worker.run = lambda *a: [init_pdb(), Worker.run(*a)][-1]

Или вот так:

def wrapper(*a):
    # init pdb here
    Worker.run(*a)

Worker.run = wrapper

Если вы хотите стать настоящим хардкором, вы можете переопределить threading.Thread.start или, возможно, threading.Thread вообще, прежде чем импортировать другие модули, например:

class DebuggedThread(threading.Thread):
    def __init__(self):
        super(DebuggedThread, self).__init__()
        self._real_run = self.run
        self.run = self._debug_run
    def _debug_run(self):
        # initialize debugger here
        self._real_run()

threading.Thread = DebuggedThread