zoukankan      html  css  js  c++  java
  • 消费者与生产者模式的概念

    生产者与消费者模型,其实是把一个需要进程通信的问题 分开考虑

    生产者,只需要王队列里存任务

    消费者,只需要从队列里取任务

    多线程版生产者与消费者模式

    # -*- coding: utf-8 -*-
    """ 生产者与消费者模型 """
    
    
    from threading import Thread
    from queue import Queue
    from random import randint
    
    q = Queue(4)
    
    # 生产者
    class Producer(Thread):
        def __init__(self, q):
            super().__init__()
            self.queue = q
    
        def run(self):
            while True:
                item = randint(0, 100)
                self.queue.put(item)
                print("生产了", item)
    
    
    # 消费者
    class Consumer(Thread):
        def __init__(self, q):
            super().__init__()
            self.queue = q
    
        def run(self):
            while True:
                item = self.queue.get()
                print("消费了", item)
    
    
    if __name__ == "__main__":
        producer = Producer(q)
        consumer = Consumer(q)
        producer.start()
        consumer.start()

     多进程版生产者与消费者模式

    # -*- coding: utf-8 -*-
    """ 进程生产者与消费者模型 """
    
    from multiprocessing import Process, Manager
    from random import randint
    
    
    # 生产者
    class Producer(Process):
        def __init__(self, q):
            super().__init__()
            self.queue = q
    
        def run(self):
            print('?')
            while True:
                items = [item for item in range(randint(0, 10))]
                self.queue.put(items)
                print("生产了", items)
    
    # 消费者
    class Consumer(Process):
        def __init__(self, q):
            super().__init__()
            self.queue = q
    
        def run(self):
            while True:
                items = self.queue.get()
                print("消费了", items)
    
    
    if __name__ == '__main__':
        manager = Manager()
        # q为守护进程,主进程如果先结束了,q就释放了,因此需要主进程等待子进程结束
        q = manager.Queue(3)  # manager.list()  , manager.dict()
        producer = Producer(q)
        consumer = Consumer(q)
        producer.start()
        consumer.start()
        producer.join()
        consumer.join()
        # input()  # 阻塞
  • 相关阅读:
    vue 中 vue-router、transition、keep-alive 怎么结合使用?
    vue 对列表数组删除和增加
    eclipse如何快速查找某个类
    在 eclipse 中设置每行的字数
    如何查看某个端口被谁占用
    sql只修改第一二行数据
    android真机自动化测试
    appium自动化测试中获取toast消息的解决方法【转】
    eclipse下python的selenium自动化环境的搭建
    Xpath用法官方手册
  • 原文地址:https://www.cnblogs.com/tangpg/p/10637537.html
Copyright © 2011-2022 走看看