python学习--queue 队列

队列queue:

作用:程序之间解耦;提高运行效率

class queue.Queue(maxsize=0) #先入先出
class queue.LifoQueue(maxsize=0) #last in fisrt out 
class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列
Queue.qsize()
Queue.empty() #return True if empty  
Queue.full() # return True if full 
Queue.put(itemblock=Truetimeout=None)
Queue.put_nowait(item)  #不等待,直接回复错误结果,避免卡死
Queue.get(block=Truetimeout=None) #等待的时间只有timeout 秒
Queue.get_nowait()
 1 import queue
 2
 3 q = queue.Queue() #先入先出
 4
 5 q.put("d1")
 6 q.put("d2")
 7 q.put("d3")
 8 print(q.qsize())
 9 print(q.get()) #取数据,按顺序取
10 print(q.get())
11 print(q.get())
12
13 #q.get_nowait()  #不等待,直接回复错误结果,避免卡死
14 #q.get(timeout=1)  #等待的时间只有1s
15 #q.get()  #不能再取了,因为里面没有了,会卡死。
16
17 q = queue.LifoQueue(3) #后入先出
18
19 q.put("d1")
20 q.put("d2")
21 q.put("d3")
22 print(q.qsize())
23 print(q.full())  #判断是否队列存储满,返回布尔值
24 print(q.empty())  #判断是否队列是否为空,返回布尔值
25 print(q.get()) #取数据,按反序取
26 print(q.get())
27 print(q.get())
28
29
30 q = queue.PriorityQueue(3) #优先级输出
31
32 q.put((10,"d1"))
33 q.put((11,"d2"))
34 q.put((1,"d3"))
35 print(q.qsize())
36 print(q.full())  #判断是否队列存储满,返回布尔值
37 print(q.empty())  #判断是否队列是否为空,返回布尔值
38 print(q.get()) #取数据,按照优先级取,从小到大
39 print(q.get())
40 print(q.get())

集群的基础:

经典的生产者消费者模型

 1 import threading,time
 2
 3 import queue
 4
 5 q = queue.Queue(maxsize=10)
 6
 7
 8 def Producer(name):
 9     count = 1
10     while True:
11         q.put("%s 牌骨头%s" % (name, count))
12         print("%s 生产了骨头 %s " % (name, count))
13         count += 1
14         time.sleep(0.1)
15
16
17 def Consumer(name):
18     #while q.qsize()>0:
19     while True:
20         print("[%s] 取到[%s] 并且吃了它..." % (name, q.get()))
21         time.sleep(1)
22
23
24 p = threading.Thread(target=Producer,args=("big dog",))
25 c = threading.Thread(target=Consumer,args=("jojo",))
26 c1 = threading.Thread(target=Consumer,args=("cj",))
27
28 p.start()
29 c.start()
30 c1.start()

原文地址:https://www.cnblogs.com/Ian-learning/p/11794877.html

时间: 2024-10-16 20:33:33

python学习--queue 队列的相关文章

python基础 — Queue 队列

queue介绍 queue是python中的标准库,俗称队列. 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性. 注意: 在python2.x中,模块名为Queue   python3.x 为 queue queue模块有三种队列及构造函数: Python queue模块的FIFO队列 先进先出. queue.Queue(

python学习笔记-Day11 (线程、进程、queue队列、生产消费模型、携程)

线程使用 ###方式一 import threading def f1(arg): print(arg) t = threading.Thread(target=f1, args=(123,)) t.start() # start会调用run方法执行 # t是threading.Thread类的一个对象 # t.start()就会以线程的方式执行函数,可以使用pycharm ctrl选择start方法 # 找到Thread类的start方法,在start方法的注释中就已经写明,会去调用run()

Python学习笔记——进阶篇【第九周】———线程、进程、协程篇(队列Queue和生产者消费者模型)

Python之路,进程.线程.协程篇 本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 参考链接http://www.cnblogs.com/alex3714/articles/5230609.html

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构时,这些高级的数据结构可能给我们以迷惑. 比如,使用list实现queue的时候,入队操作append()时间复杂度可以认为是O(1),但是,出队操作pop(0)的时间复杂度就是O(n). 如果是想利用python学学数据结构的话,我觉得还是自己实现一遍基本的数据结构为好. 1.链表 在这里,我想使

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

python学习笔记-(十五)RabbitMQ队列

rabbitMQ是消息队列:想想之前的我们学过队列queue:threading queue(线程queue,多个线程之间进行数据交互).进程queue(父进程与子进程进行交互或者同属于同一父进程下的多个子进程进行交互):如果两个独立的程序,那么之间是不能通过queue进行交互的,这时候我们就需要一个中间代理即rabbitMQ 消息队列: RabbitMQ ZeroMQ ActiveMQ ........... 一. 安装 1. ubuntu下安装rabbitMQ: 1.1 安装: sudo a

进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型

一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: 1 import paramiko 2 # 创建SSH对象 3 ssh = paramiko.SSHClient() 4 5 # 允许连接不在know_hosts文件中的主机 6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 7 # 连接服务器 8 ss

python多线程--优先级队列(Queue)

Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue.这些队列都实现了锁原语,能够在多线程中直接使用.可以使用队列来实现线程间的同步. Queue模块中的常用方法: Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue.fu

C++ Primer 学习笔记_11_标准模板库_stack、queue队列容器与priority_queue优先队列容器

C++ Primer 学习笔记_11_标准模板库_stack.queue队列容器与priority_queue优先队列容器 1.stack堆栈 stack堆栈是一个后进先出(Last In First Out,LIFO)的线性表,插入和删除元素都只能在表的一端进行.插入元素的一端称为栈顶,而另一端称为栈底.插入元素叫入栈(Push),删除元素叫出栈(Pop).下图是堆栈示意图 堆栈只提供入栈,出栈,栈顶元素访问和判断是否为空等几种方法.采用push()方法将元素入栈:采用pop()方法出栈:采用