1313
1414_global_sender = None
1515
16+ DEFAULT_QUEUE_TIMEOUT = 0.05
17+
1618
1719def _set_global_sender (sender ):
1820 """ [For testing] Function to set global sender directly
@@ -29,6 +31,7 @@ def setup(tag, **kwargs):
2931def get_global_sender ():
3032 return _global_sender
3133
34+
3235def close ():
3336 get_global_sender ().close ()
3437
@@ -42,10 +45,12 @@ def __init__(self, tag,
4245 verbose = False ,
4346 buffer_overflow_handler = None ,
4447 nanosecond_precision = False ,
45- msgpack_kwargs = None , * args , ** kwargs ):
48+ msgpack_kwargs = None ,
49+ queue_timeout = DEFAULT_QUEUE_TIMEOUT , * args , ** kwargs ):
4650 super (CommunicatorThread , self ).__init__ (** kwargs )
4751 self ._queue = Queue ()
4852 self ._do_run = True
53+ self ._queue_timeout = queue_timeout
4954 self ._conn_close_lock = threading .Lock ()
5055 self ._sender = sender .FluentSender (tag = tag , host = host , port = port , bufmax = bufmax , timeout = timeout ,
5156 verbose = verbose , buffer_overflow_handler = buffer_overflow_handler ,
@@ -61,7 +66,7 @@ def send(self, bytes_):
6166 def run (self ):
6267 while self ._do_run :
6368 try :
64- bytes_ = self ._queue .get (block = False )
69+ bytes_ = self ._queue .get (block = True , timeout = self . _queue_timeout )
6570 except Empty :
6671 continue
6772 self ._conn_close_lock .acquire ()
@@ -101,6 +106,14 @@ def last_error(self, err):
101106 def clear_last_error (self , _thread_id = None ):
102107 self ._sender .clear_last_error (_thread_id = _thread_id )
103108
109+ @property
110+ def queue_timeout (self ):
111+ return self ._queue_timeout
112+
113+ @queue_timeout .setter
114+ def queue_timeout (self , value ):
115+ self ._queue_timeout = value
116+
104117 def __enter__ (self ):
105118 return self
106119
@@ -119,14 +132,16 @@ def __init__(self,
119132 buffer_overflow_handler = None ,
120133 nanosecond_precision = False ,
121134 msgpack_kwargs = None ,
135+ queue_timeout = DEFAULT_QUEUE_TIMEOUT ,
122136 ** kwargs ): # This kwargs argument is not used in __init__. This will be removed in the next major version.
123137 super (FluentSender , self ).__init__ (tag = tag , host = host , port = port , bufmax = bufmax , timeout = timeout ,
124138 verbose = verbose , buffer_overflow_handler = buffer_overflow_handler ,
125139 nanosecond_precision = nanosecond_precision , msgpack_kwargs = msgpack_kwargs ,
126140 ** kwargs )
127141 self ._communicator = CommunicatorThread (tag = tag , host = host , port = port , bufmax = bufmax , timeout = timeout ,
128142 verbose = verbose , buffer_overflow_handler = buffer_overflow_handler ,
129- nanosecond_precision = nanosecond_precision , msgpack_kwargs = msgpack_kwargs )
143+ nanosecond_precision = nanosecond_precision , msgpack_kwargs = msgpack_kwargs ,
144+ queue_timeout = queue_timeout )
130145 self ._communicator .start ()
131146
132147 def _send (self , bytes_ ):
@@ -163,6 +178,14 @@ def last_error(self, err):
163178 def clear_last_error (self , _thread_id = None ):
164179 self ._communicator .clear_last_error (_thread_id = _thread_id )
165180
181+ @property
182+ def queue_timeout (self ):
183+ return self ._communicator .queue_timeout
184+
185+ @queue_timeout .setter
186+ def queue_timeout (self , value ):
187+ self ._communicator .queue_timeout = value
188+
166189 def __enter__ (self ):
167190 return self
168191
0 commit comments