#生产者消费者 import threading # , _thread ()python2x是thread import time import queue #python2x是Queue import random
mutex = threading.Lock() #等价于_thread.allocate_lock(),也等价于_thread.allocate() myq = queue.Queue(10) num = range(10)
classProducer(threading.Thread): defrun(self): global myq, num for i in range(30): time.sleep(0.3) ifnot myq.full() and mutex.acquire(): info = random.choice(num) myq.put(info) print("put in data: ", info, "; queue size", myq.qsize()) mutex.release()
classConsumer(threading.Thread): defrun(self): global myq, num for i in range(30): time.sleep(1) ifnot myq.empty() and mutex.acquire(): info = myq.get() print("get out data: ", info, "; queue size", myq.qsize()) mutex.release()
defmain(): print ('main') p = Producer() c = Consumer() p.start() c.start()
defrun(self) : products = range(5) global share_queue whileTrue : num = random.choice(products) my_lock.acquire() share_queue.put(num) print"Produce : ", num my_lock.release() time.sleep(random.random())
classConsumer(threading.Thread) :
defrun(self) : global share_queue whileTrue: my_lock.acquire() if share_queue.empty() : #这里没有使用信号量机制进行阻塞等待, print"Queue is Empty..." my_lock.release() time.sleep(random.random()) continue num = share_queue.get() print"Consumer : ", num my_lock.release() time.sleep(random.random())