python进阶--线程队列Queue和生产消费者模型

线程队列Queue

  • 官方文档:https://docs.python.org/zh-cn/3.6/library/queue.html
  • 参考博客:https://blog.csdn.net/weixin_43533825/article/details/89155648

Queue方法:

Queue.qsize() :返回队列的大小
Queue.empty() :如果队列为空,返回True,反之False
Queue.full() :如果队列满了,返回True,反之False,Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]]):获取队列,timeout等待时间
Queue.get_nowait() :相当于Queue.get(False),非阻塞方法
Queue.put(item) :写入队列,timeout等待时间
Queue.task_done() :在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done():调用告诉队列该任务已经处理完毕。
Queue.join() :实际上意味着等到队列为空,再执行别的操作

生产者消费着模型

# queue默认线程安全
import threading
import time

# Python2
# from Queue import Queue

# Python3
import threading
import time
import queue

lock =threading.Lock()
count = 0

class Producer(threading.Thread):
    def run(self):
        global count
        while True:
            # qsize返回queue内容长度
            if queue.qsize() < 1000:
                for i in range(100):
                    count = count +1
                    msg = self.name + '生成了产品'+str(count)
                    # put是网queue中放入一个值
                    queue.put(msg)
                    print(msg)
                    time.sleep(0.5)

class Consumer(threading.Thread):
    def run(self):
        global queue
        while True:
            if queue.qsize() > 20:
                for i in range(3):
                    # get是从queue中取出一个值
                    msg = self.name + '消费了'+ queue.get()
                    print(msg)
                    time.sleep(1)

if __name__ == '__main__':
    queue = queue.Queue()

    for i in range(200):
        queue.put('初始化产品'+str(i))
    for i in range(2):
        p = Producer()
        p.start()
    for i in range(5):
        c = Consumer()
        c.start()

猜你喜欢

转载自blog.csdn.net/qq_25672165/article/details/111475787