tornado.locks.Lock release



龙卷风示例给出了锁的如下示例:

>>> from tornado import gen, locks
>>> lock = locks.Lock()
>>>
>>> @gen.coroutine
... def f():
...    with (yield lock.acquire()):
...        # Do something holding the lock.
...        pass
...
...    # Now the lock is released.

是否需要在with语句之后手动释放锁,或者这是在该块中使用with语句的目的?如果是这种情况,为什么有一个单独的release(),这个函数需要被屈服吗?

正确,with语句确保Lock被释放,不需要自己调用release

release自然是非阻塞的——你的协程可以在不等待任何其他协程的情况下完成对release的调用——因此release不需要yield语句。注意到release的返回值是None,而acquire的返回值是Future,您可以自己确定。

最新更新