Spaces:
Paused
Paused
| import threading | |
| from opentelemetry.sdk.trace import ReadableSpan | |
| from opentelemetry.sdk.trace.export import BatchSpanProcessor | |
| class LazyBatchSpanProcessor(BatchSpanProcessor): | |
| def __init__(self, *args, **kwargs): | |
| super().__init__(*args, **kwargs) | |
| self.done = True | |
| with self.condition: | |
| self.condition.notify_all() | |
| self.worker_thread.join() | |
| self.done = False | |
| self.worker_thread = None | |
| def on_end(self, span: ReadableSpan) -> None: | |
| if self.worker_thread is None: | |
| self.worker_thread = threading.Thread( | |
| name=self.__class__.__name__, target=self.worker, daemon=True | |
| ) | |
| self.worker_thread.start() | |
| super().on_end(span) | |
| def shutdown(self) -> None: | |
| self.done = True | |
| with self.condition: | |
| self.condition.notify_all() | |
| if self.worker_thread: | |
| self.worker_thread.join() | |
| self.span_exporter.shutdown() | |