code: def receive(self):
          
          while self.running:
              if self._receiver_lock.acquire(blocking=False):
                  try:
                      raw = self.conn.recv()
                  except WebSocketTimeoutException:
                      self._receiver_lock.release()
                      continue
                  except WebSocketConnectionClosedException:
                      # this needs to restart the client, while keeping track
                      # of the currently subscribed channels!
                      self.conn = None
                      self._controller_q.put('restart')
                  except AttributeError:
                      # self.conn is None, idle loop until shutdown of thread
                      self._receiver_lock.release()
                      continue
                  msg = time.time(), json.loads(raw)
                  log.debug("receiver Thread: Data Received: %s", msg)
                  self.receiver_q.put(msg)
                  self._receiver_lock.release()
              else:
                  # The receiver_lock was locked, idling until available
                  time.sleep(0.5)
docs: Receives incoming websocket messages, and puts them on the Client queue
          for processing.
          :return: