1+ from __future__ import print_function
2+
13import json
2- import time
34import zlib
45import urllib3
56import logging
67import threading
78import certifi
9+ import sys
10+ import traceback
11+
812from datetime import datetime , timedelta
913
1014from ._compat import queue
@@ -64,22 +68,23 @@ def thread():
6468 disabled_until = None
6569 while 1 :
6670 item = transport ._queue .get ()
71+ if item is _SHUTDOWN :
72+ transport ._queue .task_done ()
73+ break
74+
6775 if disabled_until is not None :
68- if disabled_until < datetime .utcnow ():
76+ if datetime .utcnow () < disabled_until :
77+ transport ._queue .task_done ()
6978 continue
7079 disabled_until = None
7180
72- if item is None :
73- if transport ._done :
74- break
75- continue
76- elif item is _SHUTDOWN :
77- break
78-
7981 try :
8082 disabled_until = send_event (transport ._pool , item , auth )
83+ transport ._queue .task_done ()
8184 except Exception :
82- logger .exception ("Could not send sentry event" )
85+ print ("Could not send sentry event" , file = sys .stderr )
86+ print (traceback .format_exc (), file = sys .stderr )
87+ transport ._queue .task_done ()
8388 continue
8489
8590 t = threading .Thread (target = thread )
@@ -91,7 +96,6 @@ class Transport(object):
9196 def __init__ (self , dsn , http_proxy = None , https_proxy = None ):
9297 self .dsn = dsn
9398 self ._queue = None
94- self ._done = False
9599 self ._pool = _make_pool (dsn , http_proxy = http_proxy , https_proxy = https_proxy )
96100
97101 def start (self ):
@@ -108,7 +112,6 @@ def capture_event(self, event):
108112 pass
109113
110114 def close (self ):
111- self ._done = True
112115 if self ._queue is not None :
113116 try :
114117 self ._queue .put_nowait (_SHUTDOWN )
@@ -117,12 +120,12 @@ def close(self):
117120 self ._queue = None
118121
119122 def drain_events (self , timeout ):
120- deadline = time .time () + timeout
121123 q = self ._queue
122- while not self ._done and q .qsize () > 0 :
123- if time .time () >= deadline :
124- return False
125- time .sleep (0.1 )
124+ if q is None :
125+ return True
126+
127+ with q .all_tasks_done :
128+ q .all_tasks_done .wait (timeout )
126129 return True
127130
128131 def __del__ (self ):
0 commit comments