42
42
]
43
43
44
44
45
+ class ShutdownSignalReceived (Exception ):
46
+ pass
47
+
48
+
45
49
@dataclass
46
50
class WorkerProcessRequest (Generic [RequestT ]):
47
51
request : RequestT
@@ -132,25 +136,24 @@ async def get_request(
132
136
# if we simply use asyncio.to_thread(requests_queue.get)
133
137
# the cancellation task doesn't propagate because the
134
138
# asyncio.to_thread is blocking
135
- return await asyncio .to_thread (requests_queue .get )
136
- # def _get_queue_intermittently():
137
- # while True:
138
- # try:
139
- # return requests_queue.get(timeout=shutdown_poll_interval_seconds)
140
- # except queue.Empty:
141
- # logger.info("Checking shutdown even is set in get_request")
142
- # if shutdown_event.is_set():
143
- # logger.info(f"Shutdown signal received in future {process_id}")
144
- # raise asyncio.CancelledError()
145
- # # return None
146
- #
147
- # try:
148
- # return await asyncio.to_thread(_get_queue_intermittently) # type: ignore[attr-defined]
149
- # except asyncio.CancelledError:
150
- # logger.info("kaki")
151
- # # return None
152
- # raise
153
- # # raise
139
+ def _get_queue_intermittently ():
140
+ while True :
141
+ try :
142
+ return requests_queue .get (timeout = shutdown_poll_interval_seconds )
143
+ except queue .Empty :
144
+ logger .info ("Checking shutdown even is set in get_request" )
145
+ if shutdown_event .is_set ():
146
+ logger .info (f"Shutdown signal received in future { process_id } " )
147
+ raise asyncio .CancelledError ()
148
+ # return None
149
+
150
+ try :
151
+ return await asyncio .to_thread (_get_queue_intermittently ) # type: ignore[attr-defined]
152
+ except asyncio .CancelledError :
153
+ logger .info ("kaki" )
154
+ # return None
155
+ raise
156
+ # raise
154
157
155
158
async def send_result (
156
159
self ,
@@ -267,7 +270,7 @@ async def _process_runner():
267
270
],
268
271
return_when = asyncio .FIRST_EXCEPTION ,
269
272
)
270
- logger .info ("First exception happened" )
273
+ logger .info (f "First exception happened, done: [ { [ r . get_name () for r in done ] } " )
271
274
272
275
for task in pending :
273
276
logger .debug (f"Cancelling task { task .get_name ()} " )
@@ -281,7 +284,7 @@ async def _process_runner():
281
284
282
285
for task in done :
283
286
task_exception = task .exception ()
284
- if not isinstance (task_exception , asyncio . CancelledError ):
287
+ if not isinstance (task_exception , ShutdownSignalReceived ):
285
288
raise task_exception
286
289
try :
287
290
asyncio .run (_process_runner ())
@@ -303,7 +306,8 @@ async def _wait_for_shutdown(
303
306
await asyncio .sleep (shutdown_poll_interval )
304
307
305
308
logger .debug ("Shutdown signal received" )
306
- raise asyncio .CancelledError ("Shutdown event set, cancelling process loop." )
309
+ raise ShutdownSignalReceived ("Shutdown event set, cancelling process loop." )
310
+ # raise asyncio.CancelledError("Shutdown event set, cancelling process loop.")
307
311
308
312
async def _process_synchronous_requests_loop (
309
313
self ,
0 commit comments