六.并发编程 (线程对列)

一 .线程队列(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')
'''
原文地址:https://www.cnblogs.com/Sup-to/p/11207093.html