@GoodForest

Как правильно замерять время обработки двунаправленного потокового запроса на grpc через locust?

При текущем тесте на каждый запрос почему-то среднее время обработки запроса вырастает. Может я в коде ошибся?

И как в таком случае замерит response_length?
grpc_gevent.init_gevent()

class GrpcClient:
    def __init__(self, stub):
        self._stub_class = stub.__class__
        self._stub = stub

    def __getattr__(self, name):
        func = self._stub_class.__getattribute__(self._stub, name)

        def wrapper(*args, **kwargs):
            request_meta = {
                "request_type": "grpc",
                "name": name,
                "start_time": time.time(),
                "response_length": 0,
                "exception": None,
                "context": None,
                "response": None,
            }
            start_perf_counter = time.perf_counter()
            try:
                request_meta["response"] = func(*args, **kwargs)
#ВОПРОС 2, правильно ли замеряю длину ответа? 
#Ничего толкового из request_meta["response"] почему-то не могу получить...
                request_meta["response_length"] = len(
                    list(iter(request_meta["response"]))    
                    )
            except grpc.RpcError as e:
                request_meta["exception"] = e
# ВОПРОС 1, правильно ли замерять так время для двунаправленного потокового запроса? Время будет общее до завершения пула запросов? Или на каждую итерацию запроса замеряется?
            request_meta["response_time"] = (
                time.perf_counter() - start_perf_counter) * 1000     
            events.request.fire(**request_meta)
            return request_meta["response"]

        return wrapper


class GrpcUser(User):
    abstract = True

    stub_class = None

    def __init__(self, environment):
        super().__init__(environment)

        self._channel = grpc.insecure_channel(
            f'{os.getenv("NGINX_HOST")}:{os.getenv("NGINX_PORT_EXT")}')
        self._channel_closed = False
        stub = self.stub_class(self._channel)
        self.client = GrpcClient(stub)


class HelloGrpcUser(GrpcUser):
    host = f'{os.getenv("NGINX_HOST")}:{os.getenv("NGINX_PORT_EXT")}'
    stub_class = stt_pb2_grpc.SpeechToTextServiceStub

    @task
    def sayHello(self):
        if not self._channel_closed:
            self.client.StreamingRecognize(generate_requests(
                "/service/gateway/resources/test.wav"
            ))
        time.sleep(1)
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы