`
steven-zhou
  • 浏览: 213300 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

生产消费者简单实现

阅读更多
#!/usr/bin/python

import threading
from time import ctime, sleep
from Queue import Queue
from random import randint

class WadeThread(threading.Thread):
    def __init__(self, func, args, name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args

    def getResult(self):
        return self.result

    def run(self):
        print 'starting', self.name, 'at:', ctime()
        self.result = apply(self.func, self.args)
        print self.name, 'finished at:', ctime()


def produce(queue, loops):
    for i in range(loops):
        sleep(randint(0, 2))
        queue.put('192.168.102.x', 1)
        print 'producing object for Q... size now', queue.qsize()

def consume(queue, loops):
    for i in range(loops):
        sleep(randint(2, 5))
        o = queue.get(1)
        print 'consumed object from Q... size now', queue.qsize()

funcs = [produce, consume]

def main():
    q = Queue(1000)
    threads = []
    for i in range(len(funcs)):
        t = WadeThread(funcs[i], (q, 10))
        threads.append(t)

    for i in range(len(funcs)):
        threads[i].start()

    for i in range(len(funcs)):
        threads[i].join()

if __name__ == '__main__':
    main()

分享到:
评论

相关推荐

    多线程简易实现生产者消费者模式

    在Java中,我们通常通过线程间的通信和同步来实现这个模式,以避免生产者过度生产导致资源浪费,或消费者过快消费导致无货可取的情况。 核心概念: 1. **缓冲区**:生产者和消费者共享的存储区域,用于存放产品。在...

    生产者与消费者 java实现

    本主题将深入探讨生产者与消费者模型的Java实现。 生产者与消费者问题的核心是有一个共享资源(例如,一个缓冲区),生产者不断地生产产品并放入缓冲区,而消费者则从缓冲区取出产品进行消费。关键在于确保生产者...

    操作系统生产者与消费者问题Java简单模拟实现

    总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...

    Java多线程实现生产者消费者

    这就是一个基本的Java“生产者-消费者”模型实现。通过这样的设计,我们可以有效地控制生产者和消费者的执行顺序,确保了数据的正确性,并且避免了先消费后生产的情况。在实际应用中,可能需要根据具体需求进行优化...

    操作系统课程设计——生产者消费者问题Java图形界面动态演示

    设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...

    并行openmp程序实现生产者消费者

    并行OpenMP程序实现生产者消费者模式是一种在多线程编程中常见的设计模式,它能够高效地利用系统资源,提高程序执行效率。OpenMP(Open Multi-Processing)是用于共享内存并行计算的一种API标准,它提供了一种简单的...

    生产者与消费者实验报告

    3. **能够在多线程环境下实现简单的生产者与消费者模型,并对其性能进行分析**。 4. **学会分析和解决在多线程编程中常见的问题,如死锁、饥饿等**。 #### 四、实验环境与工具 - **操作系统**:Windows/Linux/Unix...

    RabbitMQ消费者和生产者简单实现

    在Java应用中,我们可以使用RabbitMQ的Java客户端库来创建生产者和消费者,实现消息的发送与接收。 首先,让我们了解一下RabbitMQ中的基本概念: 1. **交换机(Exchange)**:交换机是RabbitMQ的核心,它负责接收...

    生产者消费者问题 Java实现

    在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...

    生产者消费者的实验报告

    - 在Linux和Windows环境下分别实现生产者消费者模型。 - 缓冲区大小固定为3,初始状态为空。 - 设置2个生产者进程,每个生产者随机等待一段时间后向缓冲区添加数据,此过程重复6次。 - 设置3个消费者进程,每个消费...

    利用管程_信号量解决生产者消费者问题

    - **缓冲区实现** (`Buffer`) 应该是通过管程的方式来实现,以管理生产者和消费者之间的数据交换。 - **生产者和消费者类** (`Producer` 和 `Consumer`) 通过调用缓冲区的方法来完成数据的生产和消费过程。 通过...

    C++ 多线程通信方式简介并结合生产者-消费者模式代码实现

    以下是一个简单的生产者-消费者模式的C++实现: ```cpp #include #include #include #include std::queue<int> buffer; std::mutex mtx; std::condition_variable cv; const int MAX_BUFFER_SIZE = 5; void ...

    生产者与消费者的设计与实现

    在DOS环境下实现生产者与消费者的挑战主要在于,DOS并不直接支持多线程。因此,可能需要使用如DOS中断(INT 21H)或者第三方库(如DPMI,DOS Protected Mode Interface)来实现类似的功能。例如,通过创建多个进程...

    LabView图形化编程语言之生产者消费者架构串口数据高速采集.zip

    总之,LabView为实现生产者消费者架构提供了一个强大的平台,结合其串口通信功能,能够构建出适用于各种测试测量应用的高速数据采集系统。这个项目不仅展示了LabView在图形化编程上的优势,还强调了并发处理和实时...

    利用记录型信号量解决生产者-消费者问题.doc

    记录型信号量通常用于解决生产者-消费者问题,因为它可以记录缓冲池中的空缓冲区和满缓冲区的数量,从而实现生产者和消费者的同步。 解决生产者-消费者问题的方法 为了解决生产者-消费者问题,我们可以使用记录型...

    利用数组解决生产者消费者问题

    在提供的C语言代码中,作者采用了一个简单的数组结构来模拟缓冲区,并利用`rand()`函数生成随机的生产者和消费者行为。`rand()`函数是C语言标准库中的随机数生成函数,它返回一个0到`RAND_MAX`(通常是32767)之间的...

    生产者和消费者模式多线程

    创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this....

    生产者消费者实验报告.doc

    在这个实验中,主要目标是通过Java编程实现基于信号量机制的进程(线程)同步和互斥,以模拟生产者和消费者如何共享有限的缓冲区资源。 1. **实验环境**: - 课程:操作系统 - 学生信息:未提供具体信息 - 实验...

Global site tag (gtag.js) - Google Analytics