码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-24 19:57:33      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:rod   分享图片   play   初始化   src   随机   pen   技术   增加   

理解此篇请先看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多线程的生产者消费者模型

标签:rod   分享图片   play   初始化   src   随机   pen   技术   增加   

原文地址:https://www.cnblogs.com/Guishuzhe/p/9844956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!