python线程锁实践实例
2016-07-19 00:00
330 查看
写这篇文章之前,我想起了一句实践出真知的诗,感觉就在嘴边但就是记不起来,最后百度之。
。 。 。 。 。 。
纸上得来终觉钱,绝知此事要躬行。
。 。 。 。 。 。
唯有实践出真知,学以致用才是学习的终点。
注意点一:
主进程(也叫主线程)也是可以请求和释放线程锁的。
注意点二:
线程锁必须是全局的,这样方能实现在主线程(就是进程)和子线程之间切换。
注意点三:
线程锁只在有请求锁的线程中生效,对第三方未请求锁的线程不起作用。
使用场景:
1,多个线程操作同一个共享变量的时候,避免共享变量出错,(两个线程同时修改变量,导致出错)。
2,让主线程阻塞,即下一步操作需要线程结果的时候,等待线程操作执行结果,其实是上边的特殊情况。
下面是例子,很好的解释了上面提到的三点注意项和场景类。
。 。 。 。 。 。
纸上得来终觉钱,绝知此事要躬行。
。 。 。 。 。 。
唯有实践出真知,学以致用才是学习的终点。
注意点一:
主进程(也叫主线程)也是可以请求和释放线程锁的。
注意点二:
线程锁必须是全局的,这样方能实现在主线程(就是进程)和子线程之间切换。
注意点三:
线程锁只在有请求锁的线程中生效,对第三方未请求锁的线程不起作用。
使用场景:
1,多个线程操作同一个共享变量的时候,避免共享变量出错,(两个线程同时修改变量,导致出错)。
2,让主线程阻塞,即下一步操作需要线程结果的时候,等待线程操作执行结果,其实是上边的特殊情况。
下面是例子,很好的解释了上面提到的三点注意项和场景类。
# coding:utf-8 import threading import time balance = 0 class ThreadTestO(threading.Thread): def __init__(self, lock): threading.Thread.__init__(self) self.lock = lock def run(self): global balance while True: print "other thread" time.sleep(1) class ThreadTest(threading.Thread): def __init__(self, lock): threading.Thread.__init__(self) self.lock = lock def run(self): global balance while True: self.lock.acquire() print "thread" print balance time.sleep(10) balance += 1 self.lock.release() if __name__ == "__main__": lock = threading.RLock() thread = ThreadTest(lock) thread.setDaemon(True) thread.start() threado = ThreadTestO(lock) threado.setDaemon(True) threado.start() while True: lock.acquire() print "main thread" print balance balance += 1 time.sleep(1) lock.release()
相关文章推荐
- python统计字符串中字符的类型个数
- python字符编码错误的解决方案
- 楼梯台阶
- 【转】Python IDE: 10个最好用的python集成开发环境(IDE)
- Python 学习之路-基本的概念(二)
- python3数据类型--数字
- Python爬虫常用模块,BeautifulSoup笔记
- Python机器学习库
- Python之queue模块以及生产消费者模型
- python字符集分析,解决windows下FTPClient下载中文名称文件乱码
- Pyston与PyPy:为Python提速的两种不同方式
- 以写代学:python continue
- python核心编程学习笔记-2016-07-18-02-enumerate()函数
- 可执行的Python程序
- 以写代学:python while循环
- python基础之线程、进程、协程
- python核心编程学习笔记-2016-07-1 4000 8-01-print
- Python的多版本如何处理--请使用pyenv
- Python之检查URL
- Python全栈开发之15、DOM