如果一个成功,则终止所有其他线程

时间:2013-07-12 12:04:38

标签: python

您好我正在尝试同时测试多个单词,但我遇到了多线程的麻烦!如果一个成功,是否可以终止所有其他线程?也许我不明白正确的线程!很困惑!这是我的代码:

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

所以我想做一些事情,如果其中一个成功退出循环。我不知道如何处理这个问题。

2 个答案:

答案 0 :(得分:2)

强制线程突然终止(即杀死它们)通常不是一个好主意 - 从同步的角度来看可能会发生不好的事情。

你可以通过让你的所有线程定期检查一个标志来实现你想要的,告诉他们如果设置了标志就尽快终止(但是以安全的方式)。

This answer应该让你顺利。

答案 1 :(得分: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