17

Is there a way to tell if a thread has exited normally or because of an exception?

0

3 Answers 3

23

As mentioned, a wrapper around the Thread class could catch that state. Here's an example.

>>> from threading import Thread
>>> class MyThread(Thread):
    def run(self):
        try:
            Thread.run(self)
        except Exception as err:
            self.err = err
            pass # or raise err
        else:
            self.err = None


>>> mt = MyThread(target=divmod, args=(3, 2))
>>> mt.start()
>>> mt.join()
>>> mt.err
>>> mt = MyThread(target=divmod, args=(3, 0))
>>> mt.start()
>>> mt.join()
>>> mt.err
ZeroDivisionError('integer division or modulo by zero',)
Sign up to request clarification or add additional context in comments.

Comments

0

You could set some global variable to 0 if success, or non-zero if there was an exception. This is a pretty standard convention.

However, you'll need to protect this variable with a mutex or semaphore. Or you could make sure that only one thread will ever write to it and all others would just read it.

4 Comments

0 for success may be a pretty standard convention, but wouldn't a boolean succeded be a little easier on the meat interpreter?
It doesn't have to be global if I subclass Thread, just need a member variable in that to indicate success. I was just wondering if there is any builtin way to do this, like the process exit code.
Threads and global state. Two great tastes tthat tate gsrat eogetherrrrrrrrrrrrrrr Segmentation fault, core dumped.
@Glyph note how I mentioned mutexs and semaphores though.
0

Have your thread function catch exceptions. (You can do this with a simple wrapper function that just calls the old thread function inside a try...except or try...except...else block). Then the question just becomes "how to pass information from one thread to another", and I guess you already know how to do that.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.