docs: def profiling(self):
          """A generator which profiles then broadcasts the result.  Implement
          sleeping loop using this::
  
             def profile_periodically(self):
                 for __ in self.profiling():
                     time.sleep(self.interval)
  
          """
          self._log_profiler_started()
          while self.clients:
              try:
                  self.profiler.start()
              except RuntimeError:
                  pass
              # should sleep.
              yield
              self.profiler.stop()
              result = self.profiler.result()
              data = pack_msg(RESULT, result,
                              pickle_protocol=self.pickle_protocol)
              self._latest_result_data = data
              # broadcast.
              closed_clients = []
              for client in self.clients:
                  try:
                      self._send(client, data)
                  except socket.error as exc:
                      if exc.errno == EPIPE:
                          closed_clients.append(client)
              del data
              # handle disconnections.
              for client in closed_clients:
                  self.disconnected(client)
          self._log_profiler_stopped()