多线程之生产者和消费者模式
思路:
需要定义一个全局变量,供生产者和消费者使用
1、对于生产者来说:x>0 wait(print) ,否则x+1(使用for循环)
2、对于消费者来说:x==0 wait(print),否则x-1(使用for循环)
3、生产者和消费者分别是一个class
1 __author__ = 'anna' 2 # coding: utf-8 3 4 import threading 5 x = 0 # 定义变量x 6 7 8 class Producer(threading.Thread): 9 10 def __init__(self, name): 11 threading.Thread.__init__(self) 12 self.name = name 13 14 def run(self): 15 # global语句可以声明一个或多个变量为全局变量,该声明仅仅在当前代码块中有效,除此之外,没有办法访问全局变量 16 global x 17 threadLock.acquire() 18 if x > 0: 19 print("我已经有东西了,再等等呗!") 20 else: 21 for i in range(6): 22 x += 1 23 print("%s正在生产,第%d个" % (self.name, x)) 24 threadLock.release() 25 26 27 class Consumer(threading.Thread): 28 29 def __init__(self, name): 30 threading.Thread.__init__(self) 31 self.name = name 32 33 def run(self): 34 global x 35 threadLock.acquire() 36 if x == 0: 37 print("我没有东西了,我需要生产!") 38 else: 39 for i in range(5): 40 x -= 1 41 print("%s正在消费,第%d个" % (self.name, x)) 42 threadLock.release() 43 44 threadLock = threading.Lock() 45 p1 = Producer('我的生产者线程') 46 p1.start() 47 p1.join() # 需要加上join方法,因为只有先生产才能消费,加上join方法不会导致错乱 48 49 c1 = Consumer('我的消费者线程') 50 c1.start() 51 c1.join()