龙卷风示例给出了锁的如下示例:
>>> 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,您可以自己确定。