我正在处理一个已重构多次的个人项目。它开始使用多线程,然后部分使用asyncio,现在又回到主要是单线程。
作为所有这些更改的结果,我在代码中具有多个threading.Lock(),我希望删除它们并进行清理以防止将来出现问题。
如何在应用程序运行时轻松确定正在使用哪些锁并被多个线程击中?
答案 0 :(得分:1)
如果我发现这种情况,我会尝试用包装器替换该锁,当发生不希望的行为时,该包装器会为我进行计数(或打印一些内容,引发异常等)。 Python很hacky,因此我可以简单地创建一个函数并覆盖原始的threading.Lock
来完成工作。这可能需要一些谨慎的实现,例如,抓住所有可能的锁定和解锁途径。
但是,您仍然必须小心,即使如此,您也可能无法使用所有可能的代码路径,因此永远不知道是否真的删除了所有“错误”。