Sigh. One more update to my earlier patch. Realized I needed to expose the Full and Empty conditions from the hub. Also realized (such shame!) that the Full and Empty conditions are in eventlet.queue.
Please find the revised patch below. Signed-off-by: Victor J. Orlikowski <[email protected]> diff --git a/ryu/base/app_manager.py b/ryu/base/app_manager.py index 3d5d895..8c733b2 100644 --- a/ryu/base/app_manager.py +++ b/ryu/base/app_manager.py @@ -279,15 +279,23 @@ class RyuApp(object): def _event_loop(self): while self.is_active or not self.events.empty(): - ev, state = self.events.get() - if ev == self._event_stop: + ev = state = None + try: + ev, state = self.events.get(timeout=5) + except hub.QueueEmpty: + continue + if (ev is None) or (ev == self._event_stop): continue handlers = self.get_handlers(ev, state) for handler in handlers: handler(ev) def _send_event(self, ev, state): - self.events.put((ev, state)) + try: + self.events.put((ev, state), timeout=5) + except hub.QueueFull: + LOG.debug("EVENT LOST FOR %s %s", + self.name, ev.__class__.__name__) def send_event(self, name, ev, state=None): """ @@ -520,7 +528,7 @@ class AppManager(object): self._close(app) events = app.events if not events.empty(): - app.logger.debug('%s events remians %d', app.name, events.qsize()) + app.logger.debug('%s events remains %d', app.name, events.qsize()) def close(self): def close_all(close_dict): diff --git a/ryu/lib/hub.py b/ryu/lib/hub.py index 5621147..954bfc8 100644 --- a/ryu/lib/hub.py +++ b/ryu/lib/hub.py @@ -91,6 +91,7 @@ if HUB_TYPE == 'eventlet': pass Queue = eventlet.queue.Queue + QueueFull = eventlet.queue.Full QueueEmpty = eventlet.queue.Empty Semaphore = eventlet.semaphore.Semaphore BoundedSemaphore = eventlet.semaphore.BoundedSemaphore Best, Victor -- Victor J. Orlikowski <> vjo@[cs.]duke.edu ------------------------------------------------------------------------------ _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
