生产者消费者模型

简介:

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()



本文转自 DBAspace 51CTO博客,原文链接:http://blog.51cto.com/dbaspace/1870859
相关文章
|
19天前
|
Java Linux
【linux线程(三)】生产者消费者模型详解(多版本)
【linux线程(三)】生产者消费者模型详解(多版本)
|
3月前
|
消息中间件 安全 Java
多线程(初阶七:阻塞队列和生产者消费者模型)
多线程(初阶七:阻塞队列和生产者消费者模型)
32 0
|
4月前
线程同步之 生产者消费者模型详解
前言 博主本来没打算讲这个比较前面的知识的(博主socket编程还有两个部分没讲,进程也才写完回收僵尸进程的三种方法,信号捕捉器也才完结),但是今天有朋友来问博主,什么是生产者消费者模型,所以博主就先为为数不多的朋友把生产者消费者模型讲一讲,希望大家能看懂(没有现成和锁知识的朋友不要急,这部分是写给有基础的朋友看的,这些知识博主都会慢慢的讲到)。 前言 博主本来没打算讲这个比较前面的知识的(博主socket编程还有两个部分没讲,进程也才写完回收僵尸进程的三种方法,信号捕捉器也才完结),但是今天有朋友来问博主,什么是生产者消费者模型,所以博主就先为为数不多的朋友把生产
26 0
|
5月前
|
SQL 供应链 安全
Linux多线程【生产者消费者模型】
Linux多线程【生产者消费者模型】
62 0
|
5月前
|
C++
C++11实现生产者消费者
C++11实现生产者消费者
35 1
|
9月前
|
安全 Linux 数据安全/隐私保护
【Linux线程同步】生产者消费者模型
【Linux线程同步】生产者消费者模型
81 0
|
10月前
|
存储 数据处理 容器
生产者消费者模型(一)
生产者消费者模型
91 0
|
10月前
|
存储
生产者消费者模型(二)
生产者消费者模型
54 0
|
缓存 Java 调度
线程协作 生产者消费者模式
线程协作 生产者消费者模式
78 0
线程协作  生产者消费者模式