Как разблокировать условие с помощью таймера в Python? - PullRequest
2 голосов
/ 28 июня 2019

У меня заблокирована условная переменная, которая находится в состоянии ожидания.Я хочу уведомить об этом из отдельного потока, используя таймер.Блокировка получена успешно, однако при вызове 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")

1 Ответ

0 голосов
/ 28 июня 2019

Как уже упоминалось здесь , проблема заключается в том, что блокировка получена, и уведомление вызывается в двух отдельных потоках (основной поток и поток таймера).

Вам необходимо получить блокировку в потоке таймера, чтобы иметь возможность вызывать уведомление от него.Пожалуйста, подробно опишите ваш вариант использования, чтобы мы могли вам помочь, и предложите альтернативу для достижения этой цели.

...