Merge pull request #69 from michael-mri/master

avoid polling  when waiting to send ping.
This commit is contained in:
liris 2014-03-24 07:04:13 +09:00
commit cbcdcc86b4

@ -901,12 +901,8 @@ class WebSocketApp(object):
self.keep_running = False self.keep_running = False
self.sock.close() self.sock.close()
def _send_ping(self, interval): def _send_ping(self, interval, event):
while True: while not event.wait(interval):
for i in range(interval):
time.sleep(1)
if not self.keep_running:
return
self.sock.ping() self.sock.ping()
def run_forever(self, sockopt=None, sslopt=None, ping_interval=0): def run_forever(self, sockopt=None, sslopt=None, ping_interval=0):
@ -935,7 +931,8 @@ class WebSocketApp(object):
self._callback(self.on_open) self._callback(self.on_open)
if ping_interval: 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.setDaemon(True)
thread.start() thread.start()
@ -958,6 +955,8 @@ class WebSocketApp(object):
self._callback(self.on_error, e) self._callback(self.on_error, e)
finally: finally:
if thread: if thread:
event.set()
thread.join()
self.keep_running = False self.keep_running = False
self.sock.close() self.sock.close()
self._callback(self.on_close) self._callback(self.on_close)