4
4
import logging
5
5
import queue
6
6
import threading
7
- import time
8
7
from collections .abc import Callable
9
8
from typing import TYPE_CHECKING , Union
10
9
@@ -55,8 +54,7 @@ def __init__(
55
54
self ._queue = queue .Queue ["EventsModelTypedDict" ](maxsize = max_queue_size )
56
55
57
56
self ._thread = threading .Thread (target = self ._worker , daemon = True )
58
- self ._thread_running = threading .Event ()
59
- self ._thread_running .set ()
57
+ self ._should_close_thread = threading .Event ()
60
58
self ._thread .start ()
61
59
62
60
atexit .register (self .close )
@@ -125,7 +123,7 @@ def close(self) -> None:
125
123
It's called automatically on program exit.
126
124
"""
127
125
logger .debug ("Shutting down, flushing remaining events..." )
128
- self ._thread_running . clear ()
126
+ self ._should_close_thread . set ()
129
127
130
128
# Try to flush remaining events
131
129
try :
@@ -134,20 +132,20 @@ def close(self) -> None:
134
132
logger .error ("Error during shutdown flush: %s" , e )
135
133
136
134
if self ._thread .is_alive ():
137
- self ._thread .join (timeout = 5 .0 )
135
+ self ._thread .join (timeout = 1 .0 )
138
136
139
137
self ._stack .close ()
140
138
logger .debug ("Shutdown complete" )
141
139
142
140
def _worker (self ) -> None :
143
141
logger .debug ("Worker thread started" )
144
- while self ._thread_running .is_set ():
142
+ while not self ._should_close_thread .is_set ():
145
143
try :
146
144
self .flush (self .max_batch_size )
147
145
except Exception as e :
148
146
logger .error ("Error in worker thread: %s" , e )
149
147
150
- time . sleep ( self .flush_interval )
148
+ self . _should_close_thread . wait ( timeout = self .flush_interval )
151
149
152
150
def _send_batch (self , events : list ["EventsModelTypedDict" ]) -> None :
153
151
response = self ._client .events .ingest (request = {"events" : events })
0 commit comments