Какой правильный способ сказать циклному потоку прекратить цикл?
У меня довольно простая программа, которая пингует указанный узел в отдельном классе threading.Thread
. В этом классе он спит 60 секунд, повторы запускаются до тех пор, пока приложение не завершится.
Я хотел бы использовать кнопку "Стоп" в wx.Frame
, чтобы попросить поток цикла остановить. Он не должен сразу заканчивать нить, он может просто прекратить цикл, когда он просыпается.
Вот мой класс threading
(обратите внимание: я еще не реализовал цикл, но он, вероятно, попадет под метод run в 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)
И в моем фрейме wxPyhton я вызываю эту функцию из кнопки "Пуск":
def CheckAsset(self, asset):
self.count += 1
thread = PingAssets(self.count, asset, self)
self.threads.append(thread)
thread.start()