diff --git a/websocket/__init__.py b/websocket/__init__.py index d234ecf..516e57d 100644 --- a/websocket/__init__.py +++ b/websocket/__init__.py @@ -901,12 +901,8 @@ class WebSocketApp(object): self.keep_running = False self.sock.close() - def _send_ping(self, interval): - while True: - for i in range(interval): - time.sleep(1) - if not self.keep_running: - return + def _send_ping(self, interval, event): + while not event.wait(interval): self.sock.ping() def run_forever(self, sockopt=None, sslopt=None, ping_interval=0): @@ -935,7 +931,8 @@ class WebSocketApp(object): self._callback(self.on_open) if ping_interval: - thread = threading.Thread(target=self._send_ping, args=(ping_interval,)) + event = threading.Event() + thread = threading.Thread(target=self._send_ping, args=(ping_interval, event)) thread.setDaemon(True) thread.start() @@ -958,6 +955,8 @@ class WebSocketApp(object): self._callback(self.on_error, e) finally: if thread: + event.set() + thread.join() self.keep_running = False self.sock.close() self._callback(self.on_close)