Quelle est la bonne façon de dire à un fil qui tourne en boucle d'arrêter de tourner en boucle ?
J'ai un programme assez simple qui envoie un ping à un hôte spécifié dans un fichier séparé. threading.Thread
classe. Dans cette classe, il se met en veille pendant 60 secondes, puis se remet en marche jusqu'à ce que l'application quitte.
J'aimerais mettre en place un bouton "Stop" dans mon système de gestion de l'information. wx.Frame
pour demander au fil en boucle de s'arrêter. Il n'est pas nécessaire de terminer le fil immédiatement, il peut simplement arrêter de tourner en boucle dès qu'il se réveille.
Voici mon threading
(note : je n'ai pas encore implémenté le bouclage, mais cela relèverait probablement de la méthode run dans PingAssets)
class PingAssets(threading.Thread):
def __init__(self, threadNum, asset, window):
threading.Thread.__init__(self)
self.threadNum = threadNum
self.window = window
self.asset = asset
def run(self):
config = controller.getConfig()
fmt = config['timefmt']
start_time = datetime.now().strftime(fmt)
try:
if onlinecheck.check_status(self.asset):
status = "online"
else:
status = "offline"
except socket.gaierror:
status = "an invalid asset tag."
msg =("{}: {} is {}. \n".format(start_time, self.asset, status))
wx.CallAfter(self.window.Logger, msg)
Et dans mon cadre wxPyhton, j'ai cette fonction appelée depuis un bouton de démarrage :
def CheckAsset(self, asset):
self.count += 1
thread = PingAssets(self.count, asset, self)
self.threads.append(thread)
thread.start()