您好我正在尝试同时测试多个单词,但我遇到了多线程的麻烦!如果一个成功,是否可以终止所有其他线程?也许我不明白正确的线程!很困惑!这是我的代码:
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
所以我想做一些事情,如果其中一个成功退出循环。我不知道如何处理这个问题。
答案 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