Jak zatrzymać pętlę wątku w Pythonie?
Jaki jest właściwy sposób powiedzenia pętli wątku, aby przestał zapętlać?
Mam dość prosty program, który pinguje określony host w osobnymthreading.Thread
klasa. W tej klasie śpi 60 sekund, uruchamia się ponownie, dopóki aplikacja nie zakończy pracy.
Chciałbym zaimplementować przycisk „Stop” w moimwx.Frame
poprosić pętlę o zatrzymanie. Nie musi od razu kończyć nici, może po prostu przestać zapętlać po obudzeniu.
Tutaj jest mójthreading
klasa (uwaga: jeszcze nie zaimplementowałem pętli, ale prawdopodobnie padłaby w metodzie uruchamiania w 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)
W mojej ramce wxPyhton mam tę funkcję wywoływaną z przycisku Start:
def CheckAsset(self, asset):
self.count += 1
thread = PingAssets(self.count, asset, self)
self.threads.append(thread)
thread.start()