用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - python代码库

多线程实现案例(Lock 消费者模式)。

2020-03-18 作者:Rainday举报

[python]代码库

import threading
import random
import time

gMoney = 0
gCondition = threading.Condition()
gTimes = 0


class Producer(threading.Thread):
    def run(self):
        global gMoney
        global gTimes
        while True:
            gCondition.acquire()
            if gTimes > 10:
                gCondition.release()
                break
            money = random.randint(0, 100)
            gMoney += money
            gTimes += 1
            print('%s赚了%d元钱,总资产为%d元钱' % (threading.current_thread().name, money, gMoney))
            gCondition.notify_all()
            gCondition.release()
            time.sleep(1)


class Consumer(threading.Thread):
    def run(self):
        global gMoney
        while True:
            gCondition.acquire()
            money = random.randint(0, 100)
            while gMoney < money:
                if gTimes > 10:
                    print('%s想消费%d元钱,但是只有%d元钱,并且生产者已经不再生产钱了!' % (threading.current_thread().name, money, gMoney))
                    gCondition.release()
                    return None
                print('%s想消费%d元钱,但是只有%d元钱,消费失败!' % (threading.current_thread().name, money, gMoney))
                gCondition.wait()
            gMoney -= money
            print('%s消费了%s元钱,还剩%d元钱。' % (threading.current_thread().name, money, gMoney))
            gCondition.release()
            time.sleep(1)


def main():
    for i in range(5):
        th = Producer(name='生产者%d号' % i)
        th.start()
    for i in range(5):
        th = Consumer(name='消费者%d号' % i)
        th.start()


if __name__ == '__main__':
    main()


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。