zoukankan      html  css  js  c++  java
  • python学习笔记 day39 队列

    1. 队列

    import queue
    q=queue.Queue()  # 线程安全的,队列是先进先出FIFO
    q.put("hello")   #
    q.put("xuanxuan")
    print(q.qsize())  # 获得队列的大小
    print(q.get())  # FIFO  所以先打印hello
    print(q.get())

    运行结果:

    2. LOFI后进先出的队列---栈

    import queue
    q=queue.LifoQueue()   # LIFO后进先出的队列----栈
    q.put("hello")
    q.put("xuanxuan")
    print(q.qsize())  # 获得队列的大小
    print(q.get())  # LifoQueue()是LIFO模型后进先出,所以先打印xuanxuan
    print(q.get())

    运行结果:


     3. 带有优先级的队列

    import queue
    q=queue.PriorityQueue()  # 带有优先级的队列
    q.put((10,"hello"))      # put()需要接收一个元组(第一个参数是优先级,第二个是所要传的内容)
    q.put((4,"xuanxuan"))
    q.put((2,"嘻嘻"))  # 数字越小,代表优先级越高,get()时越会被优先打印
    print(q.qsize())   # 打印带有优先级队列的长度
    print(q.get())
    print(q.get())
    print(q.get())

     运行结果:

     4. 使用多线程借助队列实现生产者消费者模型

    import queue
    from threading import Thread
    import time
    import random
    def procuder(name,food):
        for i in range(10):
            q.put((food,i))
            # q.put((i,(food,i)))  # 如果使用的是带有优先级的队列
            print("%s生产%s--%s"%(name,food,i))
    
    def consumer(name):
        time.sleep(random.random())
        food,i=q.get()
        print("%s消费了%s"%(name,food))
    
    q=queue.Queue()
    # q=queue.LifoQueue()  # 后进先出的队列
    # q=queue.PriorityQueue()  # 传参时需要传一个元组(第一个参数时优先级,第二个参数是内容)
    t1=Thread(target=procuder,args=("xuanxuan","酸奶酪"))  # 创建一个线程执行生产者--procuder
    t1.start()
    
    for i in range(10):
        t=Thread(target=consumer,args=(i,))  # 创建10个线程执行consumer消费者
        t.start()

    运行结果:

    talk is cheap,show me the code
  • 相关阅读:
    maven打包将依赖和配置外置的配置方式
    AngularJS零碎总结
    Python零碎总结
    win10 平台 elasticsearch 与 elasticsearch-head 的安装
    DDD中的分层架构
    读书有感--------软件的设计原则
    DDD初探
    HTTP could not register URL http://+:86/. 设置VS默认以管理员权限打开
    .net 实战 根据configuration选项生成不同的config文件
    asp.net mvc5轻松实现插件式开发
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9794747.html
Copyright © 2011-2022 走看看