我怎么能测量grpc-python处理请求所需的全部时间?到目前为止,我能做到的最好的是:
def Run(self, request, context):
start = time.time()
# service code...
end = time.time()
return myservice_stub.Response()
但是这并不能测量grpc在序列化请求、响应、传输到网络上所花费的时间等等。我正在寻找一种“钩入”这些步骤的方法。
我怎么能测量grpc-python处理请求所需的全部时间?到目前为止,我能做到的最好的是:
def Run(self, request, context):
start = time.time()
# service code...
end = time.time()
return myservice_stub.Response()
但是这并不能测量grpc在序列化请求、响应、传输到网络上所花费的时间等等。我正在寻找一种“钩入”这些步骤的方法。
import logging
import time
from typing import Callable, Any
import grpc
class RequestLoggingInterceptor(ServerInterceptor):
def intercept(
self,
method: Callable,
request: Any,
context: grpc.ServicerContext,
method_name: str,
) -> Any:
start_time = time.monotonic()
ip = context.peer().split(":")[1]
try:
start = datetime.now()
return method(request, context)
finally:
request_time = time.monotonic() - start_time
logging.info(
f"{ip} -- {datetime.now()} -- {method_name} -- {request_time}s"
)
你可以在客户端测量:
start = time.time()
response = stub.Run(request)
total_end_to_end = time.time() - start
然后,通过减少Run
方法的计算,您可以获得总开销(序列化,传输)。
为了自动化该过程,您可以将计算时间作为myservice_stub.Response
中的字段添加(至少为测试而添加)。
Run(self, request, context)
方法之前和之后添加time.time()
。 - Ajay A