From 912c2f97c5cb4317ef7b9fbb58dcc50a07ef098e Mon Sep 17 00:00:00 2001 From: Michael Rigoni Date: Fri, 21 Mar 2014 22:24:43 +0100 Subject: [PATCH] avoid polling to see if thread should return --- websocket/__init__.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) 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)