首页 » Python » 《零基础:21天搞定Python分布爬虫》Lock生成者与消费者模式

《零基础:21天搞定Python分布爬虫》Lock生成者与消费者模式

高蒙 2019/04/01 16:15 2.0k浏览 0评论


import threading
import random
import time

gMoney = 1000  # 初始化金额
gLock = threading.Lock()  # 锁
gTotalTimes = 10  # 总次数
gTimes = 0  # 记录执行的次数

# 生产者
class Producter(threading.Thread):
    def run(self):
        global gMoney
        global gTimes
        global gTotalTimes
        while True:
            money = random.randint(100, 1000)
            gLock.acquire()  # 加锁
            if gTimes >= gTotalTimes:
                gLock.release()  # 退出要同时将锁解除掉 不然程序会处于等待状态 解锁
                break
            gMoney += money
            print('%s生产了%d元钱,剩余%d元钱' % (threading.current_thread(), money, gMoney))
            gTimes += 1
            gLock.release()  # 解锁
            time.sleep(0.5)

# 消费者
class Consumer(threading.Thread):
    def run(self):
        global gMoney
        global gTimes
        global gTotalTimes
        while True:
            money = random.randint(100, 1000)
            gLock.acquire()  # 加锁
            if gMoney >= money:
                gMoney -= money
                print('%s消费了%d元钱,剩余%d元钱' % (threading.current_thread(), money, gMoney))
            else:
                print('余额不足,剩余%d,消费%d 执行次数%d 总次数 %d' % (gMoney, money, gTimes, gTotalTimes))
                if gTimes >= gTotalTimes:
                    gLock.release()
                    break
            gLock.release()
            time.sleep(0.5)


def main():
    # 消费
    for i in range(5):
        t = Consumer(name='消费者%d' % i)
        t.start()

    # 生产
    for i in range(3):
        t = Producter(name='生成者%d' % i)
        t.start()


if __name__ == '__main__':
    main()





相关文章

我有话说

站长昵称:(*)

输入内容:

选个头像:

评论列表

    ...

    高蒙

    男, PHP程序猿

    文章

    481

    标签

    38

    热度

    10w+

    南京, 江苏, 中国

    人生要是没有理想, 那跟咸鱼有什么分别。