鱼C论坛

 找回密码
 立即注册
查看: 2158|回复: 0

[技术交流] 多线程:经典的生产者和消费者问题

[复制链接]
发表于 2020-9-25 09:28:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 队列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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 13:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表