记那些踩过的坑:只能用一次的contextlib.contextmanager

记那些踩过的坑:只能用一次的contextlib.contextmanager最近想要实现一个需求,优雅地使用不阻塞的threading.Lock(),何谓优雅,就是基本不改动,继续使用with。一开始我的代码是这样子的def non_blocking_lock(lock: Union[threading.Lock, threading.RLock]): @contextmanager def _(): locked = lock.acquire(blocking=False) try: yield lock ......