簡體   English   中英

Python線程:隊列工作者-掛起程序

[英]Python threading: Queue workers - hang the program

我正在嘗試用做某事的工作人員實現一個簡單的隊列。
程序應該等待,直到工作人員完成清空隊列,然后繼續執行。
我以文檔示例為例,嘗試在一個類中實現它,因為這將在我的項目中實現。
像這樣:

class Test:
    def __init__(self, n, q):
        self.q = Queue()

        print "Starting workers..."
        for i in range(n):
            t = threading.Thread(target=self.worker)
            t.daemon = True
            t.start()
        print "Workers started"

        for i in range(q):
            self.q.put(i)
        self.q.join()
        print "Exiting"

    def worker(self):
        name = threading.currentThread().getName()
        print "Thread %s started" % name
        while True:
            item = self.q.get()
            print "Processing item %d" % item
            sleep(1)
            self.q.task_done()

當實例化類t = Test(2, 100) ,我只能看到"Thread... started"消息,程序掛起。
代碼有什么問題?

編輯:
我只是注意到,盡管此代碼在IDLE (我對其進行了測試)中掛起,但在命令行上可以完美地執行。
看起來像是環境問題。

是的,這一定是環境問題。 我什至在一些不同的編輯器和PC上對其進行了測試。

產量

Starting workers...
Thread Thread-1 started
Thread Thread-2 started
 Workers started
Processing item 0
 Processing item 1
Processing item 2
 Processing item 3
Processing item 4
 Processing item 5
Processing item 6
 Processing item 7
Processing item 8
 Processing item 9
Exiting

碼:

from Queue import Queue
import threading
from time import sleep

class Test:
    def __init__(self, n, q):
        self.q = Queue()

        print "Starting workers..."
        for i in range(n):
            t = threading.Thread(target=self.worker)
            t.daemon = True
            t.start()
        print "Workers started"

        for i in range(q):
            self.q.put(i)
        self.q.join()
        print "Exiting"

    def worker(self):
        name = threading.currentThread().getName()
        print "Thread %s started" % name
        while True:
            item = self.q.get()
            print "Processing item %d" % item
            sleep(1)
            self.q.task_done()

t = Test(2, 10)

暫無
暫無

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

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