一 .线程队列(queue
)和进程差不多(参照进程)7
一. 线程队列
引入线程队列 : import queue #和普通队列引入方法相同
线程队列方法 :
q = queue.Queue() #实例化对列,先进先出
q = queue.LifoQueue() #实例化队列,后进先出 ( Last in, first out )
q = queue.PriorityQueue() #实例化队列,优先级队列
优先级队列,put() 方法接收的是一个元组,第一个元素是优先级,第二个元素是数据
优先级如果为数字,按照数字大小比较
如果优先级是字符串或特殊字符,按照字符串或特殊字符的ASCII码比较,如果ASCII码相同,按照先进先出原则取出
1.队列先进先出(queue)
import queue
q=queue.Queue()
q.put('first')
q.put('second')
q.put('third')
print(q.get())
print(q.get())
print(q.get())
'''
结果(先进先出):
first
second
third
'''
2.栈先进后出(queue.LifoQueue())
import queue
q=queue.LifoQueue()
q.put('first')
q.put('second')
q.put('third')
print(q.get())
print(q.get())
print(q.get())
'''
结果(后进先出):
third
second
first
'''
3.队列生产者消费者
from threading import Thread,Event
import queue,time
def put_a(name,food,q):
for i in range(10):
ret="%s生产%s-->%s个"%(name,food,i)
q.put(ret)
print(ret)
q.put(None)
def get_a(q,name):
while True:
ret=q.get()
if ret is None:break
time.sleep(1)
print("%s---->吃%s"%(name,ret))
q=queue.Queue()
p1=Thread(target=put_a,args=("张三","包子",q))
p2=Thread(target=get_a,args=(q,"李四"))
p1.start()
p1.join()
p2.start()
4. 存储数据时可设置优先级的队列(queue.
PriorityQueue
(maxsize=0))
import queue
q=queue.PriorityQueue()
#put进入一个元组,元组的第一个元素是优先级(通常是数字,也可以是非数字之间的比较),数字越小优先级越高
q.put((20,'a'))
q.put((10,'b'))
q.put((30,'c'))
print(q.get())
print(q.get())
print(q.get())
'''
结果(数字越小优先级越高,优先级高的优先出队):
(10, 'b')
(20, 'a')
(30, 'c')
'''