• Python并发编程之Queue队列


    一、python的queue 模块

    queue模块实现了各种多生产者-多消费者队列,可用于在执行的多个线程之间安全地交换信息。
    queue模块定了3种不同的队列类。

    Queue([maxsize])
    
    • 1

    创建一个FIFO先进先出队列。maxsize是队列中可以放入的项目的最大值。如果省略maxsize或将它置为0,队列大小将是无限大。

    LifoQueue([maxsize])
    
    • 1

    创建一个LIFO后进先出队列,也叫做栈。

    PriorityQueue([maxsize])
    
    • 1

    创建一个优先级队列,其中项目按照优先级从低到高依次排列。使用这种队列时,项目应该是(priority, data)形式的元组,其中priority是一个数字。

    队列类的实例q具有以下方法:

    • q.empty()
    • q.full()
    • q.put(item [, block [, timeout]])
    • q.put_nowait(item)
    • q.get([block [, timeout]])
    • q.get_nowait()
    • q.task_done()
    • q.join()

    使用队列一般可以简化多线程的程序。例如,可以使用共享队列将线程连接在一起,而不必依赖于必须有锁定保护的共享状态。在这种模型中,工作者线程一般充当数据的使用者。

    二、使用Queue的示例代码

    import threading
    from queue import Queue
    
    class WorkerThread(threading.Thread):
        def __init__(self, *args, **kwargs):
            threading.Thread.__init__(self, *args, **kwargs)
            self.input_queue = Queue()
            
        def send(self, item):
            self.input_queue.put(item)
        
        def close(self):
            self.input_queue.put(None)
            self.input_queue.join()
            
        def run(self):
            while True:
                item = self.input_queue.get()
                if item is None:
                    break
                # 处理项目
                print(item)
                self.input_queue.task_done()
            self.input_queue.task_done()
            return
        
    w = WorkerThread()
    w.start()
    w.send("hello")
    w.send("world")
    w.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    js面试题
    QStatusBar开发详解
    【ECMAScript6】类Class
    Android 字符串 占位符
    FPGA基础协议三:SPI读取FLASH
    接口测试框架-Rest-Assured教程,入门即精通
    【蓝桥】小蓝的疑问
    【vscode远程开发】使用SSH远程连接服务器 「内网穿透」
    小程序页面路由传参的方法?
    Elasticsearch克隆索引
  • 原文地址:https://blog.csdn.net/hubing_hust/article/details/127955522