@@ -295,28 +295,31 @@ async def listen(self) -> AsyncGenerator[AckableMessage, None]:
295295 )
296296 logger .debug ("Starting fetching unacknowledged messages" )
297297 for stream in [self .queue_name , * self .additional_streams .keys ()]:
298- lock = redis_conn .lock (
298+ pipe = redis_conn .pipeline ()
299+ lock = pipe .lock (
299300 f"autoclaim:{ self .consumer_group_name } :{ stream } " ,
300301 timeout = self .unacknowledged_lock_timeout ,
301302 )
302- if await lock .locked ():
303- continue
304- async with lock :
305- pending = await redis_conn .xautoclaim (
306- name = stream ,
307- groupname = self .consumer_group_name ,
308- consumername = self .consumer_name ,
309- min_idle_time = self .idle_timeout ,
310- count = self .unacknowledged_batch_size ,
311- )
312- logger .debug (
313- "Found %d pending messages in stream %s" ,
314- len (pending [1 ]),
315- stream ,
303+ await lock .acquire ()
304+ await pipe .xautoclaim (
305+ name = stream ,
306+ groupname = self .consumer_group_name ,
307+ consumername = self .consumer_name ,
308+ min_idle_time = self .idle_timeout ,
309+ count = self .unacknowledged_batch_size ,
310+ )
311+ await lock .release ()
312+ results = await pipe .execute ()
313+ pending = results [1 ]
314+
315+ logger .debug (
316+ "Found %d pending messages in stream %s" ,
317+ len (pending [1 ]),
318+ stream ,
319+ )
320+ for msg_id , msg in pending [1 ]:
321+ logger .debug ("Received message: %s" , msg )
322+ yield AckableMessage (
323+ data = msg [b"data" ],
324+ ack = self ._ack_generator (id = msg_id , queue_name = stream ),
316325 )
317- for msg_id , msg in pending [1 ]:
318- logger .debug ("Received message: %s" , msg )
319- yield AckableMessage (
320- data = msg [b"data" ],
321- ack = self ._ack_generator (id = msg_id , queue_name = stream ),
322- )
0 commit comments