class MainLoop: def __init__(self, scheduler: 'Scheduler', bus=SYSTEM_BUS): self.interface = DBusInterface(scheduler=scheduler) self.scheduler = scheduler self.scheduler.status_update_callback = self.__status_update_handler self.scheduler.pause_callback = self.__pause_handler self.bus = bus self.service_identifier = get_dbus_service_identifier(bus) self.loop = EventLoop() def start(self): self.bus.publish_object(self.service_identifier.object_path, self.interface) self.bus.register_service(self.service_identifier.service_name) signal.signal(signal.SIGTERM, self.__sigterm_handler) try: self.loop.run() finally: self.bus.disconnect() def __sigterm_handler(self, signal_number, frame): Logger.info('Received SIGTERM') self.stop() def __status_update_handler(self, job_name: str, scheduler_status: str, retry: int): self.interface.StatusUpdateNotifier(job_name, scheduler_status, retry) def __pause_handler(self, is_paused: bool): self.interface.PauseNotifier(is_paused) def stop(self): self.loop.quit()
def create_loop(*args, **kwargs): loop = EventLoop() GLib.idle_add(run_in_loop, *args, **kwargs) GLib.timeout_add_seconds(self._timeout, kill_loop, loop) loop.run() return self._result
# # Handle changed properties. # Start the server, start the listener and run the client. # from dasbus.loop import EventLoop from common import REGISTER def callback(interface, changed_properties, invalid_properties): """The callback of the DBus signal PropertiesChanged.""" print("Properties of {} has changed: {}".format( interface, changed_properties )) if __name__ == "__main__": # Create a proxy of the object /org/example/Register # provided by the service org.example.Register proxy = REGISTER.get_proxy() # Connect the callback to the DBus signal PropertiesChanged. proxy.PropertiesChanged.connect(callback) # Start the event loop. loop = EventLoop() loop.run()