15

スレッドが正常に終了したのか、例外が原因で終了したのかを判断する方法はありますか?

4

3 に答える 3

20

前述のように、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',)
于 2009-06-12T15:03:59.813 に答える
0

成功した場合はグローバル変数を0に設定し、例外が発生した場合はゼロ以外に設定できます。これはかなり標準的な規則です。

ただし、この変数はミューテックスまたはセマフォで保護する必要があります。または、1つのスレッドだけが書き込みを行い、他のすべてのスレッドがそれを読み取るようにすることもできます。

于 2009-06-12T13:33:12.417 に答える
0

スレッド関数に例外をキャッチさせます。try(これは、 ...exceptまたはtry... except...elseブロック内の古いスレッド関数を呼び出すだけの単純なラッパー関数を使用して行うことができます)。そうすると、質問は「あるスレッドから別のスレッドに情報を渡す方法」になります。あなたはすでにその方法を知っていると思います。

于 2009-06-12T13:43:05.590 に答える