• Python queue队列


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

      1、 先入先出

    1 class queue.Queue(maxsize = 0)
     1 #!/usr/bin/python
     2 # -*- coding : utf-8 -*-
     3 # 作者: Presley
     4 # 时间: 2018-12-1
     5 # 邮箱:1209989516@qq.com
     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:UserswohaoshuaiAppDataLocalProgramsPythonPython36python.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 # 邮箱:1209989516@qq.com
     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:UserswohaoshuaiAppDataLocalProgramsPythonPython36python.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 # 邮箱:1209989516@qq.com
     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((5,[1,2,3])) #设置优先级为5
    17 q.put((1,Foo(1))) #设置优先级为1
    18 q.put((6,1)) #设置优先级为6
    19 
    20 
    21 data1 = q.get_nowait() #获取第一次放入的数据
    22 data2 = q.get_nowait() #获取第二次放入的数据
    23 data3 = q.get_nowait() #获取第三次放入的数据
    24 
    25 
    26 print(data1)
    27 print(data2)
    28 print(data3)

    执行结果:

    1 C:UserswohaoshuaiAppDataLocalProgramsPythonPython36python.exe E:/PythonLearn/day16/queue_learn.py
    2 (1, <__main__.Foo object at 0x000001A0B8792710>)
    3 (5, [1, 2, 3])
    4 (6, 1)
    5 
    6 Process finished with exit code 0
  • 相关阅读:
    请求被中止: 未能创建 SSL/TLS 安全通道,设置 TLSv1.2和TLSv1.1版本 .基础链接已经关闭,发送时发生错误
    javascript中使用new与不使用实例化对象的区别
    Asp.net MVC 如何防止CSRF攻击
    httpModules 不起作用 modules 不起作用 血泪经验
    ASP.NET Core 中间件 中间件(Middleware)和过滤器(Filter)的区别
    ASP.NET Core开发-读取配置文件Configuration appsettings.json
    get、put、post、delete含义与区别
    postman发送json格式的post请求
    公钥,私钥和数字签名这样最好理解
    Java调用DLL有多种方式,常用的方式有JNative、JNA、JNI等。
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/10050485.html
Copyright © 2020-2023  润新知