python—threading.Lock和RLock【threading模块介绍02】
来源:互联网 发布:淘宝吊带碎花长裙 编辑:程序博客网 时间:2024/06/05 04:01
一、Lock 对象
1. 基本介绍
- Lock.acquire([blocking])
获取一把锁,阻塞的或者非阻塞的。
当调用时blocking参数设置为True(默认值),将阻塞直至锁变成unblocked,然后设置它的状态为locked并返回True。
当调用时blocking参数设置为False,将不会阻塞。
- Lock.release()
释放一把锁。
当锁是locked时,重置它为unlocked,然后返回。如果存在其他阻塞的线程正在等待锁变成unblocked状态,只会允许它们中的一个继续。
在一把没有锁住的锁上调用时,引发一个ThreadError 。
2. 简单Lock()例子
# coding: utf-8import threadingcount = 0def fun(lcok): # 全局变量 global count # 获得加锁 lcok.acquire() count += 1 # 释放锁 lcok.release()if __name__ == '__main__': # 声明一个锁 lcok = threading.Lock() thread = threading.Thread(target=fun, args=(lcok,)) thread.start()
3. 多线程Lock()例子
这个例子中,在对全局变量操作时需要加锁,如果不加锁的话,最后count值有可能不是200000,因为两个线程同时执行(但是Python不是真正的多线程,具体原因介绍Python的GIL特性请参考网址:http://www.cnblogs.com/mindsbook/archive/2009/10/15/thread-safety-and-GIL.html),会遇到对同一变量的操作,这样就会出现错误。
# coding: utf-8import threadingcount = 0def fun(lcok): # 全局变量 global count for i in xrange(100000): # 获得加锁 lcok.acquire() count += 1 # 释放锁 lcok.release()if __name__ == '__main__': # 声明一个锁 lcok = threading.Lock() # 创建多个线程,一同执行 for i in xrange(2): thread = threading.Thread(target=fun, args=(lcok,)) thread.start()
4. 其他方法操作Lock()例子
使用with来获得加锁,等同于acquire()和release()一同操作。
# coding: utf-8import threadingcount = 0def fun(lcok): # 全局变量 global count # 获得加锁 with lcok: count += 1if __name__ == '__main__': # 声明一个锁 lcok = threading.Lock() thread = threading.Thread(target=fun, args=(lcok,)) thread.start()
二、RLock对象
1. 基本介绍
一个可重入所示一个同步原语,它可以被相同的线程获得多次。 当线程在获得加锁之后,又需要共享资源,需要再次加锁。这时就可以使用RLock。
注意,acquire()和release()要成对出现,否则会报错
2. 简单Lock()例子
# coding: utf-8import threadingcount = 0def fun(lcok): # 全局变量 global count # 获得加锁 lcok.acquire() # 再一次获得加锁 lcok.acquire() count += 1 # 释放锁 lcok.release() # 释放锁 lcok.release()if __name__ == '__main__': # 声明一个RLock锁 lcok = threading.RLock() thread = threading.Thread(target=fun, args=(lcok,)) thread.start()
0 0
- python—threading.Lock和RLock【threading模块介绍02】
- python的threading模块中threading.RLock和threading.Lock
- python模块学习(threading模块中的Lock类和RLock类)
- python2.7 threading 模块 二 Lock RLock
- python threading/lock&Rlock&condition 锁
- python—threading.Semaphore和BoundedSemaphore【threading模块介绍04】
- Python多线程编程(threading ):使用Lock互斥锁RLock
- python—threading.thread【threading模块介绍01】
- python—threading.Timer【threading模块介绍03】
- python—threading.Condition【threading模块介绍05】
- Python:使用threading模块实现多线程编程六[可重入锁RLock]
- Python:使用threading模块实现多线程编程六[可重入锁RLock]
- 关于Python的进程线程协程之threading模块(二)Lock,RLock对象以及Semaphore,BoundedSemaphore对象
- python threading.Lock()
- python中threading的高级函数应用解析 Lock Rlock Condition Semaphore Timer Event Semaphore对象
- python 多线程 —— threading.Lock()
- Python threading模块
- Python threading模块简介
- C++11多线程之条件变量
- 安装VMware,创建ubuntu linux虚拟机,使用Secure连接虚拟机
- 通过Callable实现多线程
- xml要加第三方库GDataXMLDocument
- leetcode-Java-70. Climbing Stairs
- python—threading.Lock和RLock【threading模块介绍02】
- Skew Heaps 习题解
- c++第七次实验复习
- 单例对象创建
- java.util.BitSet使用与分析
- NSFileHandle
- 算法与数据结构 - 动态规划
- NSFileManger
- java I/O库中设计模式的应用