使用线程在数组中搜索

时间:2016-01-27 23:21:59

标签: python multithreading parallel-processing operating-system

让我们假设我正在使用Python,虽然它并不真正相关。

我有一个大数组,我想找出元素x是否在数组中。

但是,当其中一个线程找到该元素时,我希望所有其他线程都停止, 他们没有必要继续跑步。我希望继续使用主程序。

这样做的正确方法是什么? 我想在我发现该元素确实存在之后,最小化其他线程的cpu时间。

2 个答案:

答案 0 :(得分:0)

在Python中,您可以在主线程中创建thread-safe queue并将其传递给每个工作线程。每个工作人员应在队列为empty()时进行搜索,然后终止。如果找到结果,幸运工作者应该put()进入队列,导致所有其他工作人员在当前迭代后停止。

示例代码(未经测试):

from Queue import Queue
from Threading import Thread

class Worker(Thread):
    def __init__(self, queue):
        self.queue=queue

    def run(self):
        while self.queue.empty():
            result=search( ... )
            if result:
                queue.put(result)

def main():
    queue=Queue()
    workers=[]
    for i in xrange(0,5):
        workers.append(Worker(queue))
    result=queue.get()
    print result

答案 1 :(得分:0)

有多种方法,其中一种方法是在调用者的线程中轮询队列,其中生成的线程存储其结果。一出现第一个结果,就会终止所有正在运行的线程。

请注意,在CPython中,由于Global Interpreter Lock限制,只有一个线程可以同时运行(除非在C-extension中可以解除锁定)。还要注意,为了在大数据中搜索更合适的数据结构,应该使用数组,如二叉树。