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 成功退出循环。我不知道如何处理这个。

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 回答