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

How to unblock a Condition using a Timer in 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")

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

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