class Application(object): '''The Application represents diesel's main loop-- the coordinating entity that runs all Services, Loops, Client protocol work, etc. ''' def __init__(self, allow_app_replacement=False): assert (allow_app_replacement or runtime.current_app is None), "Only one Application instance per program allowed" runtime.current_app = self self.hub = EventHub() self.waits = WaitPool() self._run = False self._services = [] self._loops = [] self.running = set() def global_bail(self, msg): def bail(): log.critical("ABORTING: {0}", msg) self.halt() return bail def run(self): '''Start up an Application--blocks until the program ends or .halt() is called. ''' self._run = True log.warning('Starting diesel <{0}>', self.hub.describe) for s in self._services: s.bind_and_listen() s.register(self) for l in self._loops: self.hub.schedule(l.wake) self.setup() def main(): while self._run: try: self.hub.handle_events() except SystemExit: log.warning("-- SystemExit raised.. exiting main loop --") raise except KeyboardInterrupt: log.warning("-- KeyboardInterrupt raised.. exiting main loop --") break except ApplicationEnd: log.warning("-- ApplicationEnd raised.. exiting main loop --") break except Exception, e: log.error("-- Unhandled Exception rose to main loop --") log.error(traceback.format_exc()) log.info('Ending diesel application') runtime.current_app = None self.runhub = greenlet(main) self.runhub.switch()
def __init__(self, allow_app_replacement=False): assert (allow_app_replacement or runtime.current_app is None ), "Only one Application instance per program allowed" runtime.current_app = self self.hub = EventHub() self.waits = WaitPool() self._run = False self._services = [] self._loops = [] self.running = set()
class Application(object): """The Application represents diesel's main loop-- the coordinating entity that runs all Services, Loops, Client protocol work, etc. """ def __init__(self, logger=None): global current_app current_app = self self.hub = EventHub() self._run = False if logger is None: logger = logmod.Logger() self.logger = logger self._services = [] self._loops = [] def run(self): """Start up an Application--blocks until the program ends or .halt() is called. """ self._run = True logmod.set_current_application(self) log.info("Starting diesel application") for s in self._services: s.bind_and_listen() self.hub.register(s.sock, s.accept_new_connection, None) for l in self._loops: l.iterate() self.setup() while self._run: try: self.hub.handle_events() except SystemExit: log.warn("-- SystemExit raised.. exiting main loop --") break except KeyboardInterrupt: log.warn("-- KeyboardInterrupt raised.. exiting main loop --") break except Exception, e: log.error("-- Unhandled Exception in main loop --") log.error(traceback.format_exc()) log.info("Ending diesel application")
def __init__(self, allow_app_replacement=False): assert (allow_app_replacement or runtime.current_app is None), "Only one Application instance per program allowed" runtime.current_app = self self.hub = EventHub() self.waits = WaitPool() self._run = False self._services = [] self._loops = [] self.running = set()
def __init__(self, logger=None): global current_app current_app = self self.hub = EventHub() self._run = False if logger is None: logger = logmod.Logger() self.logger = logger self._services = [] self._loops = []
def __init__(self, logger=None, allow_app_replacement=False): assert (allow_app_replacement or runtime.current_app is None), "Only one Application instance per program allowed" runtime.current_app = self self.hub = EventHub() self.waits = WaitPool() self._run = False if logger is None: logger = logmod.Logger() self.logger = logger logmod.set_current_application(self) self._services = [] self._loops = []
class Application(object): '''The Application represents diesel's main loop-- the coordinating entity that runs all Services, Loops, Client protocol work, etc. ''' def __init__(self, allow_app_replacement=False): assert (allow_app_replacement or runtime.current_app is None ), "Only one Application instance per program allowed" runtime.current_app = self self.hub = EventHub() self.waits = WaitPool() self._run = False self._services = [] self._loops = [] self.running = set() def global_bail(self, msg): def bail(): log.critical("ABORTING: {0}", msg) self.halt() return bail def run(self): '''Start up an Application--blocks until the program ends or .halt() is called. ''' self._run = True log.warning('Starting diesel <{0}>', self.hub.describe) for s in self._services: s.bind_and_listen() s.register(self) for l in self._loops: self.hub.schedule(l.wake) self.setup() def main(): while self._run: try: self.hub.handle_events() except SystemExit: log.warning("-- SystemExit raised.. exiting main loop --") raise except KeyboardInterrupt: log.warning( "-- KeyboardInterrupt raised.. exiting main loop --") break except ApplicationEnd: log.warning( "-- ApplicationEnd raised.. exiting main loop --") break except Exception, e: log.error("-- Unhandled Exception rose to main loop --") log.error(traceback.format_exc()) log.info('Ending diesel application') runtime.current_app = None self.runhub = greenlet(main) self.runhub.switch()
class Application(object): '''The Application represents diesel's main loop-- the coordinating entity that runs all Services, Loops, Client protocol work, etc. ''' def __init__(self, allow_app_replacement=False): assert (allow_app_replacement or runtime.current_app is None), "Only one Application instance per program allowed" runtime.current_app = self self.hub = EventHub() self.waits = WaitPool() self._run = False self._services = [] self._loops = [] self.running = set() def global_bail(self, msg): def bail(): log.critical("ABORTING: {0}", msg) self.halt() return bail def run(self): '''Start up an Application--blocks until the program ends or .halt() is called. ''' profile = os.environ.get('DIESEL_PROFILE', '').lower() in YES_PROFILE track_gc = os.environ.get('TRACK_GC', '').lower() in YES_PROFILE track_gc_leaks = os.environ.get('TRACK_GC_LEAKS', '').lower() in YES_PROFILE if track_gc: gc.set_debug(gc.DEBUG_STATS) if track_gc_leaks: gc.set_debug(gc.DEBUG_LEAK) self._run = True log.warning('Starting diesel <{0}>', self.hub.describe) for s in self._services: s.bind_and_listen() s.register(self) for l in self._loops: self.hub.schedule(l.wake) self.setup() def _main(): while self._run: try: self.hub.handle_events() except SystemExit: log.warning("-- SystemExit raised.. exiting main loop --") raise except KeyboardInterrupt: log.warning("-- KeyboardInterrupt raised.. exiting main loop --") break except ApplicationEnd: log.warning("-- ApplicationEnd raised.. exiting main loop --") break except Exception, e: log.error("-- Unhandled Exception rose to main loop --") log.error(traceback.format_exc()) log.info('Ending diesel application') runtime.current_app = None def _profiled_main(): log.warning("(Profiling with cProfile)") # NOTE: Scoping Issue: # Have to rebind _main to _real_main so it shows up in locals(). _real_main = _main config = {'sort':1} statsfile = os.environ.get('DIESEL_PSTATS', None) if statsfile: config['filename'] = statsfile try: cProfile.runctx('_real_main()', globals(), locals(), **config) except TypeError, e: if "sort" in e.args[0]: del config['sort'] cProfile.runctx('_real_main()', globals(), locals(), **config) else: raise e
class Application(object): '''The Application represents diesel's main loop-- the coordinating entity that runs all Services, Loops, Client protocol work, etc. ''' def __init__(self, allow_app_replacement=False): assert (allow_app_replacement or runtime.current_app is None ), "Only one Application instance per program allowed" runtime.current_app = self self.hub = EventHub() self.waits = WaitPool() self._run = False self._services = [] self._loops = [] self.running = set() def global_bail(self, msg): def bail(): log.critical("ABORTING: {0}", msg) self.halt() return bail def run(self): '''Start up an Application--blocks until the program ends or .halt() is called. ''' profile = os.environ.get('DIESEL_PROFILE', '').lower() in YES_PROFILE track_gc = os.environ.get('TRACK_GC', '').lower() in YES_PROFILE track_gc_leaks = os.environ.get('TRACK_GC_LEAKS', '').lower() in YES_PROFILE if track_gc: gc.set_debug(gc.DEBUG_STATS) if track_gc_leaks: gc.set_debug(gc.DEBUG_LEAK) self._run = True log.warning('Starting diesel <{0}>', self.hub.describe) for s in self._services: s.bind_and_listen() s.register(self) for l in self._loops: self.hub.schedule(l.wake) self.setup() def _main(): while self._run: try: self.hub.handle_events() except SystemExit: log.warning("-- SystemExit raised.. exiting main loop --") raise except KeyboardInterrupt: log.warning( "-- KeyboardInterrupt raised.. exiting main loop --") break except ApplicationEnd: log.warning( "-- ApplicationEnd raised.. exiting main loop --") break except Exception, e: log.error("-- Unhandled Exception rose to main loop --") log.error(traceback.format_exc()) log.info('Ending diesel application') runtime.current_app = None def _profiled_main(): log.warning("(Profiling with cProfile)") # NOTE: Scoping Issue: # Have to rebind _main to _real_main so it shows up in locals(). _real_main = _main config = {'sort': 1} statsfile = os.environ.get('DIESEL_PSTATS', None) if statsfile: config['filename'] = statsfile try: cProfile.runctx('_real_main()', globals(), locals(), **config) except TypeError, e: if "sort" in e.args[0]: del config['sort'] cProfile.runctx('_real_main()', globals(), locals(), **config) else: raise e