[英]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.