有没有办法查明 Python 线程锁是否曾被多个线程使用过?

Is there a way to find out if Python threading locks are ever used by more than one thread?

我正在处理一个已经重构多次的个人项目。它开始使用多线程,然后部分使用 asyncio,现在又回到主要是单线程。

由于所有这些更改,我在代码中有许多 threading.Lock(),我想删除和清理这些代码以防止将来出现问题。

在应用程序运行期间,如何轻松找出哪些锁正在使用并被多个线程命中?

如果我遇到这种情况,我会尝试用包装器替换锁,包装器在发生不良行为时为我进行计数(或打印某些内容、引发异常等)。 Python 是 hacky,所以我可以简单地创建一个函数并覆盖原来的 threading.Lock 来完成工作。这可能需要一些仔细的实施,例如,捕获所有可能的锁定和解锁路径。

但是,您必须小心,即使这样,您也可能不会执行所有可能的代码路径,因此永远不知道您是否真的删除了所有 "bugs".