code: def run(self):
          
  
          if self._main_loop:
              return
  
          self._interface_added_signal = self._bus.add_signal_receiver(
              self._interfaces_added,
              dbus_interface='org.freedesktop.DBus.ObjectManager',
              signal_name='InterfacesAdded')
  
          # TODO: Also listen to 'interfaces removed' events?
  
          self._properties_changed_signal = self._bus.add_signal_receiver(
              self._properties_changed,
              dbus_interface=dbus.PROPERTIES_IFACE,
              signal_name='PropertiesChanged',
              arg0='org.bluez.Device1',
              path_keyword='path')
  
          def disconnect_signals():
              for device in self._devices.values():
                  device.invalidate()
              self._properties_changed_signal.remove()
              self._interface_added_signal.remove()
  
          self._main_loop = GObject.MainLoop()
          try:
              self._main_loop.run()
              disconnect_signals()
          except Exception:
              disconnect_signals()
              raise
docs: Starts the main loop that is necessary to receive Bluetooth events from the Bluetooth adapter.
  
          This call blocks until you call `stop()` to stop the main loop.