সমস্যাটি হলো thread_obj.start() তাৎক্ষণিক রিটার্ন করে। আপনি যে চাইল্ড থ্রেড শুরু করেছেন সেটি নিজস্ব কনটেক্স্টে, নিজস্ব স্ট্যাকে এক্সিকিউট হয়। সেখানে~Occur করা যেকোনো এক্সসেপশন চাইল্ড থ্রেডের কনটেক্স্টে থাকে। আপনাকে এই ইনফরমেশন প্যারেন্ট থ্রেডে কোনো মেসেজ পাস করে কমিউনিকেট করতে হবে।
কোডটি নিচেরভাবে রি-রাইট করা যায়:
import sys
import threading
import Queue
class ExcThread(threading.Thread):
def __init__(self, foo):
threading.Thread.__init__(self)
self.foo = foo
def run(self):
try:
raise Exception('An error occurred here.')
except Exception:
self.foo.put(sys.exc_info())
def main():
foo = Queue.Queue()
thread_obj = ExcThread(foo)
thread_obj.start()
while True:
try:
exc = foo.get(block=False)
except Queue.Empty:
pass
else:
exc_type, exc_obj, exc_trace = exc
print(exc_type, exc_obj)
print(exc_trace)
thread_obj.join(0.1)
if thread_obj.isAlive():
continue