【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()

参考资料

1. with语句加锁Lock

2. 使用with语法

posted @ 2023-06-06 13:43  苏格拉底的落泪  阅读(25)  评论(0编辑  收藏  举报