Python GRPC 服务器性能瓶颈
Python GRPC Server performance bottleneck
我写了一个包含多个rpc服务的grpc服务器。有些是一元的,有些是服务器端流。
它连接到 grpc kubernetes 服务器,所以我使用 python kubernetes 客户端来查询服务器
目前我遇到了一些性能问题,因为我认为如果有多个请求进入它会缓冲
让每个工作人员在可以处理传入请求之前完成。
def startServer():
global server
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
servicer_grpc.add_Servicer_to_server(Servicer(), server)
server.add_insecure_port('[::]:' + str(port))
server.start()
我的问题是:
我怎样才能提高我的表现?在线程池执行器中添加更多 max_workers 会有帮助吗?
如何诊断问题并找出导致速度变慢的原因?
我正在考虑在这种情况下响应的大小是否重要,因为我正在将字节串流式传输到客户端。
有没有办法测量响应的大小或者它在 python grpc 中重要吗?
我想知道您如何诊断您的 python grpc 服务器,以便您知道需要改进的地方?
您描述的性能问题听起来像是并发问题。 gRPC Python 服务器使用 ThreadExecutor 来处理 RPC,增加 worker 的数量应该可以允许更多的并发 RPC。
grpc.server(futures.ThreadPoolExecutor(max_workers=1000))
对于问题 2,cProfile、yep 和 perf
等分析器是调试性能问题的强大工具。
对于问题 3,响应的大小并不重要(KB 级别)。
另一方面,我们正在开发 gRPC 的 AsyncIO 版本 Python。它具有显着的性能提升,并解决了有限的并发 RPC 问题。目前它是实验性的,但请随时尝试。
from grpc.experimental import aio
class Servicer(...):
async def ServerStreamingMethodHandler(...):
for ...:
yield response
async def startServer():
global server
server = aio.server()
servicer_grpc.add_Servicer_to_server(Servicer(), server)
server.add_insecure_port('[::]:' + str(port))
await server.start()
我写了一个包含多个rpc服务的grpc服务器。有些是一元的,有些是服务器端流。
它连接到 grpc kubernetes 服务器,所以我使用 python kubernetes 客户端来查询服务器
目前我遇到了一些性能问题,因为我认为如果有多个请求进入它会缓冲 让每个工作人员在可以处理传入请求之前完成。
def startServer():
global server
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
servicer_grpc.add_Servicer_to_server(Servicer(), server)
server.add_insecure_port('[::]:' + str(port))
server.start()
我的问题是:
我怎样才能提高我的表现?在线程池执行器中添加更多 max_workers 会有帮助吗?
如何诊断问题并找出导致速度变慢的原因?
我正在考虑在这种情况下响应的大小是否重要,因为我正在将字节串流式传输到客户端。 有没有办法测量响应的大小或者它在 python grpc 中重要吗?
我想知道您如何诊断您的 python grpc 服务器,以便您知道需要改进的地方?
您描述的性能问题听起来像是并发问题。 gRPC Python 服务器使用 ThreadExecutor 来处理 RPC,增加 worker 的数量应该可以允许更多的并发 RPC。
grpc.server(futures.ThreadPoolExecutor(max_workers=1000))
对于问题 2,cProfile、yep 和 perf
等分析器是调试性能问题的强大工具。
对于问题 3,响应的大小并不重要(KB 级别)。
另一方面,我们正在开发 gRPC 的 AsyncIO 版本 Python。它具有显着的性能提升,并解决了有限的并发 RPC 问题。目前它是实验性的,但请随时尝试。
from grpc.experimental import aio
class Servicer(...):
async def ServerStreamingMethodHandler(...):
for ...:
yield response
async def startServer():
global server
server = aio.server()
servicer_grpc.add_Servicer_to_server(Servicer(), server)
server.add_insecure_port('[::]:' + str(port))
await server.start()