1

こんにちは、複数の単語の同時テストを許可しようとしていますが、マルチスレッドの問題に直面しています! 1 つが成功した場合、他のすべてのスレッドを終了することは可能ですか? たぶん私はスレッドを正しく理解していません! かなり混乱!これが私のコードです:

def testPass(hash, dname):
   dicFile = open(dname,'r')
   for word in dicFile.readlines():
      word = word.strip('\n')
      t = Thread(target=verifyWord, args=(hash, word))
      t.start()
   return

そのため、t の 1 つが成功してループを終了した場合のようなことをしたいと考えています。これを処理する方法がわかりません。

4

2 に答える 2

2

スレッドを突然強制的に終了させる (つまりスレッドを強制終了する) ことは、一般的には良い考えではありません。同期の観点から悪いことが起こる可能性があります。

すべてのスレッドで定期的にフラグをチェックし、フラグが設定されている場合はできるだけ早く (ただし安全な方法で) 終了するように指示することで、目的を達成できます。

この答えはうまくいくはずです。

于 2013-07-12T12:13:49.347 に答える
0

提案されているように、verifyWord で定期的にチェックする停止イベントを使用し、タスクが完了したときに設定します。

def verifyWord(hash,word,stopevent):

    #for every chunk of your computation, check that stopEvent is not set
    if not self.stopEvent.isSet():
        #do a part of your computation
    ...         

    #When you're done
    self.stopEvent.set()

stopEvent が設定されている場合、for ループを抜け出します。

def testPass(hash, dname):

    stopEvent = threading.Event()

    dicFile = open(dname,'r')
    for word in dicFile.readlines():
        word = word.strip('\n')
        t = Thread(target=verifyWord, args=(hash, word,stopEvent))
        t.start()

        if stopEvent.isSet():
            break
于 2014-06-02T09:19:25.507 に答える