【python】with语法
with语法
python从2.5版本开始引入了 with
语法。此语法非常实用,在有两个相关的操作需要在一部分代码块前后分别执行的时候,可以使用 with
语法自动完成。同事,使用 with
语法可以在特定的地方分配和释放资源,因此, with
语法也叫做“上下文管理器”。在threading模块中,所有带有 acquire()
方法和 release()
方法的对象都可以使用上下文管理器。
也就是说,下面的对象可以使用 with
语法:
- Lock
- RLock
- Condition
- Semaphore
在python中,threading中的Lock模块有acquire()和release()两种方法,这两种方法与with语句的搭配相当于,进入with语句块时候会先执行acquire()方法,语句块结束后会执行release方法。
from threading import Lock
temp_lock = Lock()
with temp_lock:
print(temp_lock)
# 输出是 <locked _thread.lock object at 0x10e304870> 说明temp_lock上锁了
print(temp_lock)
# 输出是<unlocked _thread.lock object at 0x10e304870> 说明temp_lock被释放了
现在来解析一下with语句:
with temp_lock:
# do something...
相当于以下代码:
temp_lock.acquire()
try:
# do something...
finally:
temp_lock.release()