ループしているスレッドにループを停止するように指示する適切な方法は何ですか?
threading.Thread
別のクラスで指定されたホストに ping を実行するかなり単純なプログラムがあります。このクラスでは 60 秒間スリープし、アプリケーションが終了するまで再び実行されます。
wx.Frame
ループしているスレッドに停止を求めるために、「停止」ボタンを実装したいと思います。スレッドをすぐに終了する必要はありません。スレッドが起動したら、ループを停止できます。
これが私のthreading
クラスです (注: ループはまだ実装していませんが、PingAssets の run メソッドに該当する可能性があります)。
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()