以面向对象的形式使用线程和进程,利用队列写一个消费者模式和生产者模式

生产者负责生产,消费者负责消费,简化工作量

使用random库随机生成一个数来表示生产和消费的量

  线程

from threading import Thread
from rando0m import randint
from queue import Queue
from time import sleep

queue = Queue(4)    # 一个有4位的队列

class Producer(Thread):
    def __init__(self, queue):
        super().__init__()  # 继承了Thread所有的方法
        self.queue = queue  

    def run(self):  # 改写run方法
        while True:
            item = randint(1, 99)    # 随机生成生产的量
            self.queue.put(item) 
            print('生产者生产了%s'%item)
            sleep(1) # 放慢速度,方便我们查看

class Concumer(Thread):
    def __init__(self, queue):
        super().__init__()
        self.queue = queue

    def run(self):
        while True:
            item = self.queue.get()
            print('消费者消费了%s'%item)
            sleep(1)

producer = Producer(queue)
concumer = Concumer(queue)
producer.start()
concumer.start()
producer.join()
concumer.join()

进程需要注意的事,队列导入的不是queue库里的,虽然也可以,但是不推荐,这里推荐用multiprocessing.Manage.Queue()

from multiprocessing import Process, Manager
from random import randint
from time import sleep

mgr = Manager()    # Manage开启的是守护进程,结尾必须.join添加阻塞
queue = mgr.Queue(4)

class Producer(Process):
    def __init__(self, queue):
        super().__init__()
        self.queue = queue

    def run(self):
        while True:
            item = randint(1, 99)    # 随机生成生产的量
            self.queue.put(item)
            print('生产者生产了%s'%item)
            sleep(1) # 放慢速度,方便我们查看

class Concumer(Process):
    def __init__(self, queue):
        super().__init__()
        self.queue = queue

    def run(self):
        while True:
            item = self.queue.get()
            print('消费者消费了%s'%item)
            sleep(1)

producer = Producer(queue)
concumer = Concumer(queue)
producer.start()
concumer.start()
producer.join()
concumer.join()

运行结果如图:代码会一直执行,除非手动停止

猜你喜欢

转载自www.cnblogs.com/pywjh/p/9497743.html