经典模型-生产者消费者模型

本文通过一个具体的Python示例介绍了生产者消费者模型的工作原理。在该模型中,生产者线程负责生成数据并将其放入队列,消费者线程则从队列中取出数据并进行处理。为防止竞态条件的发生,队列操作被放置在一个锁保护的区域内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wKioL1gh7iCxN7KJAACZZwVyFVs172.png-wh_50

在生产者/消费者模型中,生产者Producer负责生产数据,而消费者Consumer负责使用数据。多个生产者线程会在同一时间运行,生产数据,并放到内存中一个共享的区域(Queue)。期间,多个消费者线程读取内存共享区,消费里面的数据

解释:

  • 1、我们开始了一个生产者线程(下称生产者)和一个消费者线程(下称消费者)。

  • 2、生产者不停地添加(数据)到队列,而消费者不停地消耗。

  • 3、由于队列是一个共享变量,我们把它放到lock程序块内,以防发生竞态条件。

  • 4、在某一时间点,消费者把所有东西消耗完毕而生产者还在挂起(sleep)。消费者尝试继续进行消耗,但此时队列为空,出现IndexError异常。

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import threading
import time
import Queue
import random

q=Queue.Queue()
lock=threading.RLock()
def Product(name):
    for i in range(20):
        lock.acuqire()
        q.put(i)
        print "------",(name,i)
        lock.release()
        time.sleep(random.randrange(4))
def Consumer(name):
    count=0
    while count<20:
        lock.acuqire()
        data=q.get()
        count+=1
        print "......",(name,data)
        lock.release()
        time.sleep(random.randrange(4))
p=threading.Thread(target=Product,args=('aaa',))
c=threading.Thread(target=Consumer,args=('bbb',))
p.start()
c.start()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值