第五章 爬虫进阶(四) 2020-01-21

四、 Lock版生产者和消费者模式(1


生产者和消费者模式


生产者和消费者模式是多线程开发中常见到的一种模式。生产者的线程专门用来生产一些数据,然后存放到一个中间的变量中。消费者再从这个中间的变量中取出数据进行消费。通过生产者和消费者模式,可以让代码达到高内聚低耦合的目标,程序分工更加明确,线程更加方便管理。


Lock版生产者和消费者模式


生产者和消费者因为要使用中间变量,中间变量经常是一些全局变量,因此需要使用锁来保证数据完整性。以下是使用threading.Lock锁实现的“生产者与消费者模式”的一个例子:


import threading

import random

 

gMoney = 0

gLock = threading.Lock()

 

 

class Producer(threading.Thread):

    def run(self):

        global gMoney

        while True:

            gLock.acquire()

            money = random.randint(0, 100)

            gMoney += money

            print("%s生产了%d元钱" %(threading.current_thread().name, money))

            gLock.release()

 

 

class Consumer(threading.Thread):

    def run(self) -> None:

        global gMoney

        while True:

            gLock.acquire()

            money = random.randint(0, 100)

            if gMoney >= money:

                gMoney -= money

                print("%s消费了%d元钱" %(threading.current_thread().name, money))

            else:

                print("%s消费者想消费%d元钱,但是余额只有%d"% (threading.current_thread().name, money, gMoney))

            gLock.release()

 

 

def main():

    for x in range(5):

        th = Producer(name="生产者%d号" % x)

        th.start()

 

    for x in range(5):

        th = Consumer(name="消费者%d号" % x)

        th.start()

 

 

if__name__ == '__main__':

    main()



上一篇文章 第五章 爬虫进阶(三) 2020-01-20 地址:

https://www.jianshu.com/p/5304979f7c7f

下一篇文章 第五章 爬虫进阶(五) 2020-01-22 地址:

https://www.jianshu.com/p/5a48a27fa59e



以上资料内容来源网络,仅供学习交流,侵删请私信我,谢谢。

你可能感兴趣的:(第五章 爬虫进阶(四) 2020-01-21)