12345678910111213141516171819202122232425262728293031 |
- 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()
|