这些线程中的每一个都在搜索序列号的不同数据对象列表。如果找到它,它会将对象放入队列中。序列号是唯一的。
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()
有没有办法在找到所需的序列号时停止所有线程? 并说明它可能找不到序列号并且队列将保持为空?
答案 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次迭代,以避免大量的锁争用。