兼容 gevent 的可重入锁?

gevent-compatible reentrant lock?

gevent 中的 RLock 等价物是什么?如果没有等效项,如何识别当前的 greenlet 以便我可以实现一个?

从阅读源代码来看,gevent.lock.BoundedSemaphore(1) 相当于一个简单的(不可重入的)锁。测试也表明了这一点。

gevent.lock模块有一个RLock的实现,它使用gevent.hubgetcurrent方法来识别当前的greenlet。这是一个简单的例子。

from gevent.lock import RLock

lock = RLock()
with lock:
     print("acquired once")
     with lock:
          print("acquired twice")

虽然我没有找到任何文档 here, you can always read the source