Я работаю над тем, что читает команды из потока данных. Я застрял, пытаясь разработать способ повторного использования неблокирующего обратного отсчета в Python, который срабатывает от триггера. Поэтому я начал небольшую программу с использованием только ввода клавиатуры и некоторой базовой потоковой обработки для разработки логики. Я нашел несколько сообщений, и этот пост (How to create a trigger with threading.Timer?), и это было очень полезно. Но мне нужна помощь с другой стороны.Только триггерный поток при изменении значения (python)
Сейчас моя логика вдоль линий: «Каждый раз, когда значение команды является запуск 1 вызов»
Как обновить свою логику, чтобы быть: «, если значение команды является запуск 1 вызов, не вызывайте старт снова до тех пор, пока значение команды остается равным 1.
Значит, это больше, чем нормальное, если нормальное if/else, или мне нужно отслеживать логическое значение где-то. Я просто не уверен, как Подход к нему
#! /usr/bin/env python
import time
import threading
import random
from random import randint
import logging
from sys import argv
logging.basicConfig(level=logging.DEBUG, format='[%(levelname)s] (%(threadName)-10s) %(message)s')
def countdown(pName,command):
print("{0} countdown - command{1} ".format(pName,command))
retry = 0
while True:
print("{0}:{1}".format(pName,retry))
retry += 1
if retry > randint(5,10):
break
time.sleep(1)
print("{0} ended".format(pName))
def start(pName,command):
print("starting countdown for: ",pName)
t = threading.Thread(target=countdown,args=(pName,command))
t.setName(pName)
t.setDaemon(True)
t.start()
if __name__ == "__main__":
while 1:
command = int(input("[1 or 2] >"))
if command == 1:
start("Salad",command)
elif command == 2:
start("Bingo",command)
Это довольно грубо прямо сейчас, но это только первое прошлое, чтобы попытаться разобраться с этим.
Спасибо!
Есть ли в потоке флаг, когда он начинается и заканчивается? Запись простых прокси-переменных является потокобезопасной, поэтому просто используйте основной поток, а вспомогательный поток - тот же флаг. Или вы можете использовать блокировку потока в качестве своего флага. – 101
Можете ли вы поднять ответ ниже, если вы получите минуту, пожалуйста? Когда вы говорите флаг, я думаю true/false booleans. Что будет работать, иногда может получиться волосатое. –
Ответ DJ McMayhem в основном использует встроенный флаг, даже лучше! – 101