Python queue队列

一、队列在多线程的程序必须安全的在多个线程之间交互的时候是非常有用的。

  1、 先入先出

1 class queue.Queue(maxsize = 0)
 1 #!/usr/bin/python
 2 # -*- coding : utf-8 -*-
 3 # 作者: Presley
 4 # 时间: 2018-12-1
 5 # 邮箱:[email protected]
 6 # 这是我用来练习python 队列的测试脚本
 7
 8 import queue
 9 class Foo(object):
10     def __init__(self,n):
11         self.n = n
12
13
14 q = queue.Queue(maxsize=3) #生成一个保存最大值为3的队列实例
15
16 q.put([1,2,3])
17 q.put(Foo(1))
18 q.put(1)
19 #q.put(2) 因为实例化的时候规定了只能最多放三分数据因此这个put不会成功
20
21 print(q.full())#判断队列是否满了
22
23 data1 = q.get_nowait() #获取第一次放入的数据
24 data2 = q.get_nowait() #获取第二次放入的数据
25 data3 = q.get_nowait() #获取第三次放入的数据
26
27 print(q.full())#判断队列是否满了
28
29 print(data1,type(data1))
30 print(data2,type(data2))

执行结果:

1 C:\Users\wohaoshuai\AppData\Local\Programs\Python\Python36\python.exe E:/PythonLearn/day16/queue_learn.py
2 True
3 False
4 [1, 2, 3] <class ‘list‘>
5 <__main__.Foo object at 0x0000025C45E52748> <class ‘__main__.Foo‘>
6
7 Process finished with exit code 0

  2、先入后出

1 class queue.LifoQueue(maxsize=0)
 1 #!/usr/bin/python
 2 # -*- coding : utf-8 -*-
 3 # 作者: Presley
 4 # 时间: 2018-12-1
 5 # 邮箱:[email protected]
 6 # 这是我用来练习python 队列的测试脚本
 7
 8 import queue
 9 class Foo(object):
10     def __init__(self,n):
11         self.n = n
12
13
14 q = queue.LifoQueue(maxsize=3) #生成一个保存最大值为3的队列实例
15
16 q.put([1,2,3])
17 q.put(Foo(1))
18 q.put(1)
19 #q.put(2) 因为实例化的时候规定了只能最多放三分数据因此这个put不会成功
20
21 print(q.full())#判断队列是否满了
22
23 data1 = q.get_nowait() #获取第一次放入的数据
24 data2 = q.get_nowait() #获取第二次放入的数据
25 data3 = q.get_nowait() #获取第三次放入的数据
26
27
28
29 print(q.full())#判断队列是否满了
30
31 print(data1,type(data1))
32 print(data2,type(data2))

执行结果:

1 C:\Users\wohaoshuai\AppData\Local\Programs\Python\Python36\python.exe E:/PythonLearn/day16/queue_learn.py
2 True
3 False
4 1 <class ‘int‘>
5 <__main__.Foo object at 0x0000019127012748> <class ‘__main__.Foo‘>
6
7 Process finished with exit code 0

  3、存储数据时可设置优先级的队列,优先级越大越先被获取 

1 class queue.PriorityQueue(maxsize=0)
 1 #!/usr/bin/python
 2 # -*- coding : utf-8 -*-
 3 # 作者: Presley
 4 # 时间: 2018-12-1
 5 # 邮箱:[email protected]
 6 # 这是我用来练习python 队列的测试脚本
 7
 8 import queue
 9 class Foo(object):
10     def __init__(self,n):
11         self.n = n
12
13
14 q = queue.PriorityQueue(maxsize=3) #生成一个保存最大值为3的队列实例
15
16 q.put(1,[1,2,3]) #设置优先级为1
17 q.put(5,Foo(1)) #设置优先级为5
18 q.put(10,1) #设置优先级为10
19
20
21 data1 = q.get_nowait() #获取第一次放入的数据
22 data2 = q.get_nowait() #获取第二次放入的数据
23 data3 = q.get_nowait() #获取第三次放入的数据
24
25
26 print(data1,type(data1))
27 print(data2,type(data2))

  执行结果:

1 C:\Users\wohaoshuai\AppData\Local\Programs\Python\Python36\python.exe E:/PythonLearn/day16/queue_learn.py
2 1 <class ‘int‘>
3 5 <class ‘int‘>
4
5 Process finished with exit code 0

二、生产者消费者模型

  1、先进先出

原文地址:https://www.cnblogs.com/Presley-lpc/p/10050485.html

时间: 2024-11-09 04:54:47

Python queue队列的相关文章

Python 用队列实现多线程并发

# Python queue队列,实现并发,在网站多线程推荐最后也一个例子,比这货简单,但是不够规范 # encoding: utf-8 __author__ = 'yeayee.com' # 由本站增加注释,可随意Fork.Copy from queue import Queue # Queue在3.x中改成了queue import random import threading import time class Producer(threading.Thread): ""&qu

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

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

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数据结构之线性表:linkedlist链表,stack栈,queue队列

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

进击的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模块详解

单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import threading except ImportError: import dummy_threading as threading from collections import deque from heapq import heappush, heappop from time import monotonic as time __all__ =

python基础 — Queue 队列

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

python线程队列---queue

queue队列 :使用import queue,用法与进程Queue一样 用法介绍: class queue.Queue(maxsize=0) #先进先出 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 ''' class queue.Lif

112 python程序中的进程操作-进程之间进行通信(mulitiProcessing Queue队列)

一.进程间通信 IPC(Inter-Process Communication) IPC机制:实现进程之间通讯 管道:pipe 基于共享的内存空间 队列:pipe+锁的概念--->queue 二.队列(Queue) 2.1 概念-----multiProcess.Queue 创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递. Queue([maxsize])创建共享的进程队列. 参数 :maxsize是队列中允许的最大项数.如果省略此参数,则无大小限制