async def handle_request(self, request: Query) -> asyncio.Future: request.tick_enter_replica = time.time() logger.debug("Replica {} received request {}".format( self.replica_tag, request.metadata.request_id)) self.num_ongoing_requests += 1 self.num_processing_items.set(self.num_ongoing_requests) result = await self.invoke_single(request) self.num_ongoing_requests -= 1 request_time_ms = (time.time() - request.tick_enter_replica) * 1000 logger.debug("Replica {} finished request {} in {:.2f}ms".format( self.replica_tag, request.metadata.request_id, request_time_ms)) # Returns a small object for router to track request status. return b"", result
async def handle_request(self, request: Query) -> asyncio.Future: request.tick_enter_replica = time.time() logger.debug("Replica {} received request {}".format( self.replica_tag, request.metadata.request_id)) request.async_future = asyncio.get_event_loop().create_future() self.num_ongoing_requests += 1 self.batch_queue.put(request) result = await request.async_future request_time_ms = (time.time() - request.tick_enter_replica) * 1000 logger.debug("Replica {} finished request {} in {:.2f}ms".format( self.replica_tag, request.metadata.request_id, request_time_ms)) self.num_ongoing_requests -= 1 # Returns a small object for router to track request status. return b"", result
async def handle_request(self, request: Query) -> asyncio.Future: async with self.rwlock.reader_lock: request.tick_enter_replica = time.time() logger.debug("Replica {} received request {}".format( self.replica_tag, request.metadata.request_id)) num_running_requests = self._get_handle_request_stats()["running"] self.num_processing_items.set(num_running_requests) result = await self.invoke_single(request) request_time_ms = (time.time() - request.tick_enter_replica) * 1000 logger.debug("Replica {} finished request {} in {:.2f}ms".format( self.replica_tag, request.metadata.request_id, request_time_ms)) # Returns a small object for router to track request status. return b"", result
async def handle_request(self, request: Query) -> asyncio.Future: request.tick_enter_replica = time.time() logger.debug("Replica {} received request {}".format( self.replica_tag, request.metadata.request_id)) self.num_ongoing_requests += 1 self.num_processing_items.set(self.num_ongoing_requests) # Trigger a context switch so we can enqueue more requests in the # meantime. Without this line and if the function is synchronous, # other requests won't even get enqueued as await self.invoke_single # doesn't context switch. await asyncio.sleep(0) result = await self.invoke_single(request) self.num_ongoing_requests -= 1 request_time_ms = (time.time() - request.tick_enter_replica) * 1000 logger.debug("Replica {} finished request {} in {:.2f}ms".format( self.replica_tag, request.metadata.request_id, request_time_ms)) # Returns a small object for router to track request status. return b"", result