Ответ 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