При текущем тесте на каждый запрос почему-то среднее время обработки запроса вырастает. Может я в коде ошибся?
И как в таком случае замерит 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)