From 83be117966da2930692c4ed2538e1479ff33231d Mon Sep 17 00:00:00 2001 From: Andrey Pohilko Date: Sun, 28 Jan 2018 08:39:26 +0300 Subject: [PATCH] Drop port data in case handler is too slow --- pylgbst/peripherals.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pylgbst/peripherals.py b/pylgbst/peripherals.py index 1113ad0..353d442 100644 --- a/pylgbst/peripherals.py +++ b/pylgbst/peripherals.py @@ -27,7 +27,7 @@ class Peripheral(object): self._working = False self._subscribers = set() self._port_subscription_mode = None - self._incoming_port_data = queue.Queue() + self._incoming_port_data = queue.Queue(1) # limit 1 means we drop data if we can't handle it fast enough thr = Thread(target=self._queue_reader) thr.setDaemon(True) thr.setName("Port data queue: %s" % self) @@ -83,7 +83,10 @@ class Peripheral(object): subscriber(*args, **kwargs) def queue_port_data(self, data): - self._incoming_port_data.put(data) + try: + self._incoming_port_data.put_nowait(data) + except queue.Full: + logging.debug("Dropped port data: %s", data) def handle_port_data(self, data): log.warning("Unhandled device notification for %s: %s", self, str2hex(data[4:]))