Python
里有一个常用的内置库,Queue
,它是一个常规意义上的数据结构中的队列。
既然同是队列
,那它和Python
内置的list
,还有collections
里的deque
在使用上有什么差别呢?
list
是python中常见的数据结构,使用非常广泛,但它在操作上更接近其它语言数组
(array)的概念,而并不是严格意义上的队列。
而collections
里的deque
则是一个功能完备的双端队列,支持从头尾两端进行插入、弹出操作。
最后是本文的Queue
则是一个非常典型的FIFO
结构,也就是一个严格意义上的队列。不仅如此,它还是线程安全的,即使用Mutex
锁来保证多线程的安全操作。这也是它广泛用于生产消费者和维护爬虫中URL队列的原因。
接下来,利用一个例子来简单看看如何利用Queue
来实现一个生产消费者的例子。
import queue
import threading
import time
q=queue.Queue()
def product(arg):
while True:
q.put(str(arg)+'资源')
def consumer(arg):
while True:
print(arg,q.get())
time.sleep(2)
for i in range(7):
t=threading.Thread(target=product,args=(i,))
t.start()
for j in range(24):
t=threading.Thread(target=consumer,args=(j,))
t.start()