У меня есть поток, где я использую событие потока для управления потоком из-за пределов целевой функции.Python Threading Event
flag = threading.event()
В моей целевой функции, у меня есть что-то вроде этого:
def functionname(arguments):
flag.clear()
while not flag.wait(timeout = 0.5):
# do something.
всякий раз, когда я хочу, чтобы вернуть нить, из моей основной функции я говорю, flag.set(). Тогда флаг имеет значение true, моя целевая функция завершает выполнение и поток завершается.
Теперь, если я хочу использовать flag.wait (timeout = 5) в своей основной функции, я ожидаю блокировать и ждать пять секунд, чтобы выполнить часть кода «сделать что-то». Однако я вижу, что «делать что-то» часть кода выполняется каждые 0,5 секунды, как обычно, и моя основная функция блокируется на пять секунд.
Метод ожидания должен блокироваться до тех пор, пока не будет установлен флаг или не будет завершен дополнительный тайм-аут. Он блокирует мою основную функцию, а не целевую функцию. Может ли кто-нибудь знать, почему это может быть?
PS: Я определил событие флага в моей главной функции и передал его в качестве аргумента целевой функции
Я запутался .... вы 'flag.wait (тайм-аут = 5)', и вы хотите, чтобы сделать нить в 'flag.wait (таймаут = 0,5)' подождите 5 секунд вместо ? Это не работает. Тайм-аут основной нити не зависит от ребенка. Какова ваша цель? Вы пытаетесь контролировать, как долго ребенок ждет в основном потоке? – tdelaney
flag.wait (timeout = 0.5) изначально записывается, когда я хочу, чтобы целевая функция запускалась каждые 0,5 секунды. Теперь, если я хочу изменить его на 5 секунд, я использую flag.wait (5). Флаг - это событие с потоком, которое должно выполняться только для целевой функции, а не для основного потока. –