当找到我正在寻找的东西时,停止所有搜索线程? (蟒蛇)

时间:2012-06-19 15:21:03

标签: python multithreading

这些线程中的每一个都在搜索序列号的不同数据对象列表。如果找到它,它会将对象放入队列中。序列号是唯一的。

q = Queue.Queue(10)
thread_list = []
for i in range(0, 10):
   t = Thread(serial)
   thread_list.append(t)
   t.start()

而不是等待所有线程完成:

for t in thread_list:
    t.join()

有没有办法在找到所需的序列号时停止所有线程? 并说明它可能找不到序列号并且队列将保持为空?

1 个答案:

答案 0 :(得分:1)

简单的方法是使用队列...在你的线程运行器类中(这是我假设串行的)

class FindSerial(Thread):
    def __init__(self, serial, queue):
         this.serial = serial
         this.queue  = queue
         super(FindSerial, self).__init__()

    def run(self):
        .... 
        while LOOKING_FOR_SERIAL:
            if not self.queue.empty():
                  return
        ....

 ...
 for i in range(0, 10):
     t = FindSerial(serial, q)
 ...

现在通过检查队列是否通过循环你可以检查另一个线程是否找到了你正在寻找的对象,如果找到它然后你只是从你的run方法返回,这将允许join()收获线程。

注意:我可能只会在循环中检查空N次迭代,以避免大量的锁争用。