python3版本是from queue import Queue
put是在队列尾部放入数据,如果队列已满这个线程会暂停,一直等待队列有空位置才可以放数据
get是从队列的头部获取数据,如果没有数据,线程同样会暂停,会hang
设置一个空Queue,执行q.get()会一直hang
很简单一个验证方案
from queue import Queue
q=Queue(10)
for i in range(100):
q.put(i)
执行时候可以看到程序会hang
生产者消费者模型
from queue import Queue
q=Queue(10)
def producer():
for i in range(20):
q.put(i)
print(f'线程{threading.current_thread().name},放入的是{i}')
def consumer():
while not q.empty():
time.sleep(1)
result=q.get()
print(f'线程{threading.current_thread().name},获取到{result}')
threading.Thread(target=producer,name='生产者').start()
threading.Thread(target=consumer,name='消费者').start()
运行结果
线程生产者,放入的是0
线程生产者,放入的是1
线程生产者,放入的是2
线程生产者,放入的是3
线程生产者,放入的是4
线程生产者,放入的是5
线程生产者,放入的是6
线程生产者,放入的是7
线程生产者,放入的是8
线程生产者,放入的是9
线程消费者,获取到0
线程生产者,放入的是10
线程消费者,获取到1
线程生产者,放入的是11
线程消费者,获取到2
线程生产者,放入的是12
线程消费者,获取到3
线程生产者,放入的是13
线程消费者,获取到4
线程生产者,放入的是14
线程消费者,获取到5
线程生产者,放入的是15
线程消费者,获取到6
线程生产者,放入的是16
线程消费者,获取到7
线程生产者,放入的是17
线程消费者,获取到8
线程生产者,放入的是18
线程消费者,获取到9
线程生产者,放入的是19
线程消费者,获取到10
线程消费者,获取到11
线程消费者,获取到12
线程消费者,获取到13
线程消费者,获取到14
线程消费者,获取到15
线程消费者,获取到16
线程消费者,获取到17
线程消费者,获取到18
线程消费者,获取到19