我正在尝试与工作人员一起实施一个简单的队列
程序应该等到工作人员完成清空队列,然后继续执行
我拿了documentation示例并试图在课堂上实现它,因为这是它将在我的项目中实现的方式。
像这样:
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
(我测试过它)中挂起,但它在命令行上运行完美。
看起来像是一个环境问题。
答案 0 :(得分:1)
是的,这必须是一个环境问题。我甚至在几个不同的编辑器和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)