#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/7/25 9:40 # @File : produ.py import random import threading import time #生产者 class Producer(threading.Thread): def __init__(self,integers,condition,name): """ 构造器 @:param integers 整数列表 @:param condition 条件同步对象 @:param name 线程名字 """ threading.Thread.__init__(self) self.integers = integers self.condition = condition self.name = name def run(self): """ 向队列中随机添加数字 :return: """ while True: integer = random.randint(0,300) self.condition.acquire() #获取锁 print '锁被',self.name,'拿了' self.integers.append(integer) #加入列表 print integer,'被',self.name,'加入列表' print '锁 被',self.name,'唤醒' self.condition.notify() print '锁被',self.name,'释放' self.condition.release() time.sleep(1) #消费者 class Consumer(threading.Thread): def __init__(self,integers,condition,name): threading.Thread.__init__(self) self.integers = integers self.condition = condition self.name = name def run(self): while True: self.condition.acquire() print '锁被',self.name,'拿了' while True: if self.integers: integer = self.integers.pop() print integer,'从列表中被',self.name,'移除' break print self.name,'等待' self.condition.wait() print '锁被',self.name,'释放' self.condition.release() def main(): integers = [] condition = threading.Condition() consumer = Consumer(integers,condition,'消费者') producer = Producer(integers,condition,'生产者') producer.start() consumer.start() producer.join() consumer.join() if __name__ == '__main__': main() main()
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/7/25 10:10 # @File : que.py #生产者消费者,阻塞队列实现 import random from Queue import Queue import threading import time class Producer(threading.Thread): """ @:param queue 阻塞队列 @:param name 线程名字 """ def __init__(self,queue,name): threading.Thread.__init__(self) self.queue = queue self.name = name def run(self): while True: integer = random.randint(0,350) self.queue.put(integer) print self.name,'将',integer,'加入队列' time.sleep(6) class Consumer(threading.Thread): def __init__(self,queue,name): threading.Thread.__init__(self) self.queue = queue self.name = name def run(self): while True: integer = self.queue.get() print self.name,'将',integer,'从队列中移除' self.queue.task_done() def main(): queue = Queue(32) consumer = Consumer(queue,'消费者') producer = Producer(queue,'生产者') producer.start() consumer.start() if __name__ == '__main__': main() main()
本文分享自 作者个人站点/博客 前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!