[代码笔记] python 之 多线程同步锁 threading.Lock
2016-12-23 10:06
543 查看
单消费者,单生产者问题
#!python #文件名: demo_thread_lock.py #实现了: # 一个生产者(为resource赋值)后,另一个消费者淡定取走resource # 整个过程必须同步,即实现生产一个,才消费一个,且生产与消费同步进行 import threading,time #定义资源类(模拟消费物品) class Resource: def __init__(self,flag): self.flag=flag __name='' __sex='' flag=0#用于判断 轮到谁执行(即可以生产或者可以消费一个资源) def setName(self,name): self.__name=name def setSex(self,sex): self.__sex=sex def getName(self): return self.__name def getSex(self): return self.__sex #线程类 class MyThread(threading.Thread): resource='' def __init__(self,resource,flag): threading.Thread.__init__(self) self.resource=resource self.flag=flag #执行方法: def run(self): count=0 while 1:#不停的生产,也可以指定一个数量 lock.acquire()#加锁,同步,确保每生产完的东西不会被消费 if self.flag:#消费线程 if self.resource.flag:#判断是否有物品给我消费 print('Name: %s, Sex: %s'%(self.resource.getName(),self.resource.getSex()) ) self.resource.flag=0#消费结束修改标识,让生产线程可以生产物品 else:#生产进程 if not self.resource.flag:#判断是否可以生产了 self.resource.setName('Test_'+ str(count) ) sex='' if count%2==0: sex='男' else: sex='女' self.resource.setSex(sex) self.resource.flag=1#修改标识,让消费线程可以消费物品 count+=1 lock.release()#进程单次操作资源结束,释放锁 #创建一个锁 lock=threading.Lock() r=Resource(0) t1=MyThread(r,0)#创建一个生产线程 t2=MyThread(r,1)#创建一个消费线程 #前方高能,注意关闭窗口 t1.start() t2.start() #等待线程结束? 仅在控制生产数量是等待有效(可预期时长) t1.join() t2.join() print('主线程结束了')
打印如下:(妈的控制台走的太快,没没截取到开头)
注意_单数的名字性别为女, 性别没乱则对
Name: Test_580, Sex: 男Name: Test_581, Sex: 女
Name: Test_582, Sex: 男
Name: Test_583, Sex: 女
Name: Test_584, Sex: 男
Name: Test_585, Sex: 女
Name: Test_586, Sex: 男
Name: Test_587, Sex: 女
Name: Test_588, Sex: 男
Name: Test_589, Sex: 女
Name: Test_590, Sex: 男
Name: Test_591, Sex: 女
Name: Test_592, Sex: 男
Name: Test_593, Sex: 女
Name: Test_594, Sex: 男
Name: Test_595, Sex: 女
Name: Test_596, Sex: 男
Name: Test_597, Sex: 女
Name: Test_598, Sex: 男
Name: Test_599, Sex: 女
Name: Test_600, Sex: 男
Name: Test_601, Sex: 女
Name: Test_602, Sex: 男
Name: Test_603, Sex: 女
Name: Test_604, Sex: 男
Name: Test_605, Sex: 女
Name: Test_606, Sex: 男
Name: Test_607, Sex: 女
Name: Test_608, Sex: 男
Name: Test_609, Sex: 女
Name: Test_610, Sex: 男
Name: Test_611, Sex: 女
Name: Test_612, Sex: 男
Name: Test_613, Sex: 女
Name: Test_614, Sex: 男
Name: Test_615, Sex: 女
Name: Test_616, Sex: 男
Name: Test_617, Sex: 女
Name: Test_618, Sex: 男
Name: Test_619, Sex: 女
Name: Test_620, Sex: 男
Name: Test_621, Sex: 女
Name: Test_622, Sex: 男
Name: Test_623, Sex: 女
Name: Test_624, Sex: 男
Name: Test_625, Sex: 女
Name: Test_626, Sex: 男
Name: Test_627, Sex: 女
Name: Test_628, Sex: 男
Name: Test_629, Sex: 女
相关文章推荐
- [C#学习笔记之多线程2]多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore
- Python:使用threading模块实现多线程编程四[使用Lock互斥锁]
- Python 官方代码threading模块的一个死锁的bug
- python学习笔记之-代码缩进
- Python多线程同步Lock、RLock、Semaphore、Event实例
- python threading 学习笔记
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
- python threading 学习笔记
- python学习笔记--代码
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
- python学习笔记——多线程同步问题
- python学习笔记——多线程同步问题
- Python:使用threading模块实现多线程编程四[使用Lock互斥锁]
- 【python标准库学习】thread,threading(二)多线程同步
- python threading.Lock()
- python学习笔记12-类代码编写细节
- python 常用代码学习笔记之commands模块
- python 常用代码学习笔记之commands模块
- 读《编写高质量代码改善python的91个建议》笔记 建议7:
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例