10.3.8.2 锁作为上下文管理器
锁实现了上下文管理器API,并与with语句兼容。使用with则不再需要显式地获得和释放锁。
import threading
import logging
def worker_with(lock):
with lock:
logging.debug('Lock acquire via with')
def worker_no_with(lock):
lock.acquire()
try:
logging.debug('Lock acquire directly')
finally:
lock.release()
logging.basicConfig(
level=logging.DEBUG,
format='(%(threadName)-10s) %(message)s',
)
lock = threading.Lock()
w = threading.Thread(target=worker_with,args=(lock,))
nw = threading.Thread(target=worker_no_with,args=(lock,))
w.start()
nw.start()
函数worker_with()和worker_no_with()用等价的方式管理锁。
运行结果: