簡體   English   中英

使用隊列的Python多線程-程序永遠被阻塞

[英]Python multithread using queue - the program gets blocked forever

我不確定程序的哪一部分是錯誤的。 它將在兩個隊列的join()調用中被阻止。 但是,如果我刪除了2個join調用,則該程序根本無法工作。

    import threading
    import Queue

    queue = Queue.Queue()
    out_queue = Queue.Queue()

    fruits = ['apple', 'strawberry', 'banana', 'peach', 'rockmelon']

    class WorkerThread(threading.Thread):
        def __init__(self, queue, out_queue):
            threading.Thread.__init__(self)
            self.queue = queue
            self.out_queue = out_queue
        def run(self):
            print 'run'
            while not self.queue.empty():
                name = self.queue.get()
                self.out_queue.put(name)
                self.queue.task_done()

    def main():
        print 'start'
        for i in xrange(5):
            t = WorkerThread(queue, out_queue)
            t.setDaemon(True)
            t.start()
        #populate the queue
        for fruit in fruits:
            queue.put(fruit)
        queue.join()
        out_queue.join()
        while not out_queue.empty():
            print out_queue.get()
        print 'end'

    if __name__=='__main__':
        main()

提前致謝。

你打電話out_queue.join()它等待,直到out_queue.task_done()被調用相同的次數out_queue.put()被調用。 但是,您永遠不會調用out_queue.task_done() 最好不要首先調用out_queue.join()來解決此問題。

編輯:同樣,您在啟動WorkerThread之后正在填充queue 這意味着在您有機會插入所有元素之前,工作線程有可能會運行並完成。 在啟動工作線程之前插入它們將解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM