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()
以上是关于threading多线程的生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章