threading多线程的生产者消费者模型

Posted guishuzhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了threading多线程的生产者消费者模型相关的知识,希望对你有一定的参考价值。

理解此篇请先看http://www.cnblogs.com/haiyan123/p/7445584.html

技术分享图片
"""多线程下生产者消费者模型。定义:在同一进程,同一主线程下,
采用多线程完成多个任务的同时,各自数据保持干净整洁。即、花最少的时间
完成最多的任务"""
import threading
import random
import time
# 初始化金额
gMoney = 1000
#
gLock = threading.Lock()
# 最大生产次数
gTotalTimes = 10
# 计数器
gTimes = 0


class Producer(threading.Thread):
    """生产者"""
    def run(self):
        global gMoney      # 引用全局变量需先声明
        global gTimes
        while True:
            # 生产随机金额
            money = random.randint(100, 1000)
            # 加锁
            gLock.acquire()
            # 判断生产次数
            if gTimes >= gTotalTimes:
                gLock.release()
                break
            # 金额增加
            gMoney += money
            print("%s生产了%d元钱,剩余%d元钱" % ("小黑", money, gMoney))
            # 生产完成计数器加一
            gTimes += 1
            # 释放锁
            gLock.release()
            time.sleep(1)


class Consumer(threading.Thread):
    """消费者"""
    def run(self):
        global gMoney
        while True:
            # 消费随机金额
            money = random.randint(100, 1000)
            # 加锁
            gLock.acquire()
            # 判断剩余金额大于消费数继续消费
            if gMoney >= money:
                gMoney -= money
                print("%s消费了%d元钱,剩余%d元钱" % ("小胖子", money, gMoney))
            else:
                # 判断生产次数大于最大生产数停止消费释放锁
                if gTimes >= gTotalTimes:
                    gLock.release()
                    break
                print("%s消费者准备消费%d元钱,剩余%d元钱,不足" % ("小白", money, gMoney))
            # 释放锁
            gLock.release()
            time.sleep(1)


def main():
    for x in range(5):
        t = Producer(name="生产者线程%s" % x)
        t.start()

    for i in range(3):
        t = Consumer(name="消费者线程%s" % i)
        t.start()


if __name__ == __main__:
    main()
View Code

 

以上是关于threading多线程的生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章

python 复习—并发编程实战——多线程和多进程的生产者消费者模型线程进程再总结

[多线程] 生产者消费者模型的BOOST实现

使用Python多线程实现生产者与消费者模型

多线程实现生产者消费者

java多线程知识点总结

java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)