Python 生产者消费者模型

Python 生产者消费者模型

生产者消费者模型:

  • 解耦,通过队列降低耦合,支持并发,生产者和消费者是两个独立的并发体,他们之间使用缓冲区作为桥梁连接,生产者只往里丢数据,就可以生产下一个数据了,消费者从中拿数据,这样就不会阻塞,影响速度。可以很好的支持任务的忙闲不均匀的问题。

我们都知道实现生产者消费者模型的三要素:

  • 生产者
  • 消费者
  • 队列 (或其他的容哭器,但队列不用考虑锁的问题)

写一个简单的生产者消费者模型的例子:

# -*- coding:utf-8 -*-
import time, threading, queue, random

# 队列 (先入先出)
q = queue.Queue()


# 生产者
def producer():
    for i in range(1, 10):
        time.sleep(random.random())
        gold = "金币%d" % i
        q.put(gold)
        print("[%s]已生产 --> %s" % (time.ctime(), gold))
    print("生产完成")


# 消费者
def consumer():
    for i in range(1, 10):
        time.sleep(random.random() * 3)
        gold = q.get()
        print("[%s]已使用 --> %s" % (time.strftime("%Y-%m-%d %H-%M-%S"), gold))
    print('消费完毕')


if __name__ == '__main__':

    t1 = threading.Thread(target=producer, name='producer')
    t2 = threading.Thread(target=consumer, name='consumer')

    t1.start()
    t2.start()

    t1.join()
    t2.join()

大致的运行效果就是如此:

[Tue Feb 12 11:43:39 2019]已生产 --> 金币1
[Tue Feb 12 11:43:40 2019]已生产 --> 金币2
[2019-02-12 11-43-40]已使用 --> 金币1
[Tue Feb 12 11:43:40 2019]已生产 --> 金币3
[Tue Feb 12 11:43:40 2019]已生产 --> 金币4
[2019-02-12 11-43-40]已使用 --> 金币2
[Tue Feb 12 11:43:40 2019]已生产 --> 金币5
[Tue Feb 12 11:43:41 2019]已生产 --> 金币6
[Tue Feb 12 11:43:42 2019]已生产 --> 金币7
[2019-02-12 11-43-42]已使用 --> 金币3
[Tue Feb 12 11:43:42 2019]已生产 --> 金币8
[Tue Feb 12 11:43:43 2019]已生产 --> 金币9
生产完成
[2019-02-12 11-43-43]已使用 --> 金币4
[2019-02-12 11-43-45]已使用 --> 金币5
[2019-02-12 11-43-46]已使用 --> 金币6
[2019-02-12 11-43-46]已使用 --> 金币7
[2019-02-12 11-43-48]已使用 --> 金币8
[2019-02-12 11-43-48]已使用 --> 金币9
消费完毕
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值