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
1 changed files with 6 additions and 7 deletions

View File

@ -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)