Python thread exit code

后端 未结 3 699
太阳男子
太阳男子 2021-02-19 03:14

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

相关标签:
3条回答
  • 2021-02-19 03:59

    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.

    0 讨论(0)
  • 2021-02-19 04:09

    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',)
    
    0 讨论(0)
  • 2021-02-19 04:10

    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.

    0 讨论(0)
提交回复
热议问题