code: async def _report(self):
          
          while True:
              oldstatus = dict(self.status)
              stat = await self._updateq.get()
              if self._update_cb is not None and oldstatus != stat:
                  # Each client gets its own copy of the dict.
                  self.loop.create_task(self._update_cb(dict(stat)))
docs: Call _update_cb with the status dict as an argument whenever a status
          update occurs.
  
          This method is a coroutine