2009-06-12 22 views

答えて

13

前述したように、Threadクラスの周りのラッパーはその状態を捕捉できます。ここに例があります。

>>> from threading import Thread 
>>> class MyThread(Thread): 
    def run(self): 
     try: 
      Thread.run(self) 
     except Exception as self.err: 
      pass # or raise 
     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',) 
-1

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

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

+0

成功のための0はかなり標準的な慣習かもしれませんが、ブーリアン 'succeded'は肉通訳者にとって少し簡単でしょうか? –

+0

スレッドをサブクラス化する場合、グローバルである必要はありません。成功を示すためにメンバー変数が必要です。私は、プロセスの終了コードのように、これを行うための組み込みの方法があるかどうか疑問に思っていました。 –

+5

スレッドとグローバル状態。 2つの偉大な味ttat gsrat eogetherrrrrrrrrrrrrrセグメンテーションフォールト、コアダンプされています。 – Glyph

0

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

関連する問題