gzj137070928 发表于 2020-9-25 09:28:33

多线程:经典的生产者和消费者问题

# 队列queue用来存储数据,先进来的先出去(FIFO)当队列满了之后就不在存了,.get提取数据,.put获得数据
# 后面会接触到存储数据的栈,后进来的先出去(LIFO),就像‘先穿袜子再穿鞋,而先脱鞋后脱袜子’的关系
from threading import Thread, current_thread
import time
import random
from queue import Queue

que = Queue(5)# 储存5个数据的队列


class ProducerThread(Thread):
    def run(self):
      name = current_thread().getName()
      nums = range(100)
      global que
      while True:# 死循环用来测试
            num = random.choice(nums)# 获得0-99中的一个随机数
            que.put(num)# 队列获得这个随机数
            print('生产者%s生产了数据%s' % (name, num))
            t = random.randint(1, 3)
            time.sleep(t)
            print('生产者%s--睡眠了%s秒' % (name, t))


class ConsumerThread(Thread):
    def run(self):
      name = current_thread().getName()
      global que
      while True:
            num = que.get()
            que.task_done()
            print('消费者%s消耗了数据%s' % (name, num))
            t = random.randint(1, 5)
            time.sleep(t)
            print('消费者%s--睡眠了%s秒' % (name, num))


p1 = ProducerThread(name='p1')
p1.start()# 开始运行,不然程序无执行
c1 = ConsumerThread(name='c1')
c1.start()
c2 = ConsumerThread(name='c2')
c2.start()
页: [1]
查看完整版本: 多线程:经典的生产者和消费者问题