线程队列数据共享与生产者消费者模型
queue模块简介 我们都知道同一进程下的数据是能被多个线程共享的,那么为什么这些线程在同一进程下还去使用队列呢? 所以使用队列来存放多个线程中用于共享的数据还是为了保证其数据的安全性。 ? ? ? ?官方中文文档? 方法大全
三种不同的队列 在
import queue # ==== 先进先出队列 ==== q1 = queue.Queue(maxsize=5) 该队列最大可存放5个项目 q1.put(1) 入队操作 q1.put(2) q1.put(3) print(q1.get()) 出队操作 print(q1.get()) (q1.get()) ==== 执行结果 ==== """ 1 2 3 """ ==== 先进后出队列 ==== q2 = queue.LifoQueue(maxsize=5) 该队列最大可存放5个项目 q2.put(1) 入队操作 q2.put(2) q2.put(3print(q2.get()) (q2.get()) (q2.get()) 3 2 1 """ ==== 优先级队列 ==== q3 = queue.PriorityQueue(maxsize=5) q2.put([10,"优先级为10"]) 入队操作 q2.put([20,1)">优先级为20"]) q2.put([30,1)">优先级为30]) 出队操作,如果想取出具体元素,加个 索引[1] 即可 [30,'优先级为30'] [20,'优先级为20'] [10,'优先级为10'] """ 生产者消费者模型生产者消费者模型是一种思想,大概意思就是我们不让生成者与消费者之间进行直接接触,而是通过某种缓冲的方式让彼此之间的耦合度降低。生产者生产出了产品,消费者就可以进行购买,如果没有产品就等着。 那么这个时候我们就可以使用队列了,因为队列里有阻塞的机制,我画一幅图,来看一眼。 来,我们尝试用代码实现一下: threading queue time def producer(): 生产者""" 补充:join()与task_done()time task_1(): 正在装东西..) time.sleep(3) q.put(玫瑰花") 正在装东西 q.task_done() 通知对方可以取了 task_2(): q.join() 阻塞等待通知,接到通知说明队列里里有东西了。 取到了 取东西 : q = queue.Queue(maxsize=5) t1 = threading.Thread(target=task_1,name=小明) t2 = threading.Thread(target=task_2,1)">小花) t1.start() t2.start() 正在装东西.. 取到了 玫瑰花 """ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |