【问题标题】:Python thread exit codePython线程退出代码
【发布时间】:2009-06-12 13:23:42
【问题描述】:

有没有办法判断线程是正常退出还是异常退出?

【问题讨论】:

    标签: python multithreading exit-code


    【解决方案1】:

    如前所述,Thread 类的包装器可以捕获该状态。这是一个例子。

    >>> 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',)
    

    【讨论】:

      【解决方案2】:

      如果成功,您可以将某个全局变量设置为 0,如果出现异常,则可以将其设置为非零。这是一个非常标准的约定。

      但是,您需要使用互斥锁或信号量来保护此变量。或者您可以确保只有一个线程会写入它,而所有其他线程只会读取它。

      【讨论】:

      • 0 表示成功可能是一个非常标准的约定,但布尔值 succeded 在肉类解释器上不是更容易一些吗?
      • 如果我继承Thread,它不必是全局的,只需要一个成员变量来表示成功。我只是想知道是否有任何内置方法可以做到这一点,比如进程退出代码。
      • 线程和全局状态。两个伟大的品味 tate gsrat eogetherrrrrrrrrrrrrrr 分段错误,核心转储。
      • @Glyph 请注意我是如何提到互斥锁和信号量的。
      【解决方案3】:

      让你的线程函数捕获异常。 (您可以使用一个简单的包装函数来执行此操作,该函数只调用 try...excepttry...except...else 块内的旧线程函数)。那么问题就变成了“如何将信息从一个线程传递到另一个线程”,我想你已经知道该怎么做了。

      【讨论】:

        猜你喜欢
        • 2016-11-16
        • 2013-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多