diff --git a/sentry_sdk/worker.py b/sentry_sdk/worker.py index 0efcc68167..8215573ba6 100644 --- a/sentry_sdk/worker.py +++ b/sentry_sdk/worker.py @@ -22,7 +22,7 @@ class BackgroundWorker(object): def __init__(self): # type: () -> None check_thread_support() - self._queue = queue.Queue(-1) # type: Queue[Any] + self._queue = queue.Queue(30) # type: Queue[Any] self._lock = Lock() self._thread = None # type: Optional[Thread] self._thread_for_pid = None # type: Optional[int] @@ -86,10 +86,18 @@ def start(self): def kill(self): # type: () -> None + """ + Kill worker thread. Returns immediately. Not useful for + waiting on shutdown for events, use `flush` for that. + """ logger.debug("background worker got kill request") with self._lock: if self._thread: - self._queue.put_nowait(_TERMINATOR) + try: + self._queue.put_nowait(_TERMINATOR) + except queue.Full: + logger.debug("background worker queue full, kill failed") + self._thread = None self._thread_for_pid = None @@ -114,7 +122,10 @@ def _wait_flush(self, timeout, callback): def submit(self, callback): # type: (Callable[[], None]) -> None self._ensure_thread() - self._queue.put_nowait(callback) + try: + self._queue.put_nowait(callback) + except queue.Full: + logger.debug("background worker queue full, dropping event") def _target(self): # type: () -> None