python - 如何在 Python 中使用计时器解锁条件?

我有一个锁定的条件变量,它处于等待状态。我想使用计时器从单独的线程通知它。获取锁成功,但是在调用notify时,抛出未获取锁的异常。

我在 Python 2.7 和 3.6 中尝试了不同的方法,它们的行为方式相同。

from threading import Timer, Lock, Condition

lock = Lock()
cond = Condition(lock)
timer = Timer(2, lambda: cond.notify_all())

with cond:
    timer.start()
    cond.wait()

我收到这个错误:

  File "c:\python27\Lib\threading.py", line 384, in notify
    raise RuntimeError("cannot notify on un-acquired lock")

最佳答案

如前所述here ,问题是因为获取了锁并在两个单独的线程(主线程和计时器线程)上调用了通知。

您需要获取计时器线程中的锁才能从中调用通知。请详细描述您的用例,以便我们为您提供帮助并建议实现此目标的替代方案。

https://stackoverflow.com/questions/56803390/

相关文章:

html - 仅适用于移动设备的引导轮播

c# - 如何在 Flutter 中使用外部 DLL(Dot Net)?

python - 如何在 python 中为 for 循环手动输入?

node.js - GCP 应用引擎 : Random pending requests for s

python - 如何序列化 CSR 矩阵

c++ - 使用 Microsoft Visual Studio 运行 C++ "hello wor

pyspark - 如何将 FPGrowth 项集限制为 2 或 3

python-3.x - 如何在 python 中使用 opencv 读取数据矩阵代码?

rust-cargo - 如何修复 cargo 的 "failed to parse manifes

swagger - 如何在开放式 API 规范中为字符串类型的属性指定空字符串值作为默认值