queue
)和进程差很少(参照进程)7一. 线程队列 引入线程队列 : import queue #和普通队列引入方法相同 线程队列方法 : q = queue.Queue() #实例化对列,先进先出 q = queue.LifoQueue() #实例化队列,后进先出 ( Last in, first out ) q = queue.PriorityQueue() #实例化队列,优先级队列 优先级队列,put() 方法接收的是一个元组,第一个元素是优先级,第二个元素是数据 优先级若是为数字,按照数字大小比较 若是优先级是字符串或特殊字符,按照字符串或特殊字符的ASCII码比较,若是ASCII码相同,按照先进先出原则取出
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 '''
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 '''
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()
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') '''