为了账号安全,请及时绑定邮箱和手机立即绑定

在更多线程中使用 Python gRPC 客户端存根时,我可以提高性能吗?

在更多线程中使用 Python gRPC 客户端存根时,我可以提高性能吗?

慕哥9229398 2023-06-06 16:28:27
假设我有一个 PythongRPC服务器和一个相应的客户端。根据这个问题,可以利用相同的 gRPC 通道传递给客户端存根,每个存根在不同的线程中运行。假设 RPC 函数foo()是从线程 T1 调用的,响应大约需要一秒钟。我可以foo()同时从线程 T2 调用,而 T1 仍在等待线程中的响应,或者通道是否以某种方式锁定,直到第一次调用返回?换句话说:是否通过使用更多线程来提高性能,因为相应的服务器基于线程池并且能够“并行”处理更多请求,如果是,我应该为每个线程使用相同的通道还是不同的通道?编辑:根据快速测试,似乎可以使用来自不同线程的相同通道的并行请求,并且以这种方式进行处理是有道理的。但是,因为在关闭问题之前,我想请专家确认这段代码是否正确:import timeimport threadingimport grpcimport helloworld_pb2import helloworld_pb2_grpcdef run_in_thread1(channel):    n = 10000    for i in range(n):        stub = helloworld_pb2_grpc.GreeterStub(channel)        response = stub.SayHello(helloworld_pb2.HelloRequest(name='1'))        print("client 1: " + response.message)    def run_in_thread2(channel):    n = 10000    for i in range(n):        stub = helloworld_pb2_grpc.GreeterStub(channel)        response = stub.SayHello2(helloworld_pb2.HelloRequest(name='2'))        print("client 2: " + response.message)if __name__ == '__main__':    print("I'm client")    channel = grpc.insecure_channel('localhost:50051')    x1 = threading.Thread(target=run_in_thread1, args=(channel,))    x1.start()    x2 = threading.Thread(target=run_in_thread2, args=(channel,))    x2.start()        x1.join()    x2.join()
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

gRPC 使用 HTTP/2 并且可以在一个连接上多路复用多个请求,并且 gRPC 客户端连接应该在客户端应用程序的生命周期内重复使用。

如果您在使用数据库时受到启发,我会说您不必担心它,因为在使用 gRPC 时不存在打开连接开销。


查看完整回答
反对 回复 2023-06-06
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信