Was ist der richtige Weg, um einem Loop-Thread anzuweisen, das Looping zu beenden?
Ich habe ein ziemlich einfaches Programm, das einen bestimmten Host in einer separaten threading.Thread
Klasse anpingt . In dieser Klasse schläft es 60 Sekunden, das wird erneut ausgeführt, bis die Anwendung beendet wird.
Ich möchte einen 'Stop'-Button in meinem implementieren wx.Frame
, um den Loop-Thread zum Stoppen aufzufordern. Es muss den Thread nicht sofort beenden, es kann einfach aufhören zu schleifen, sobald es aufwacht.
Hier ist meine threading
Klasse (Hinweis: Ich habe noch keine Schleife implementiert, aber sie würde wahrscheinlich unter die Ausführungsmethode in PingAssets fallen.)
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)
Und in meinem wxPyhton-Frame habe ich diese Funktion über eine Start-Schaltfläche aufgerufen:
def CheckAsset(self, asset):
self.count += 1
thread = PingAssets(self.count, asset, self)
self.threads.append(thread)
thread.start()