假設我有一個 PythongRPC服務器和一個相應的客戶端。根據(jù)這個問題,可以利用相同的 gRPC 通道傳遞給客戶端存根,每個存根在不同的線程中運行。假設 RPC 函數(shù)foo()是從線程 T1 調用的,響應大約需要一秒鐘。我可以foo()同時從線程 T2 調用,而 T1 仍在等待線程中的響應,或者通道是否以某種方式鎖定,直到第一次調用返回?換句話說:是否通過使用更多線程來提高性能,因為相應的服務器基于線程池并且能夠“并行”處理更多請求,如果是,我應該為每個線程使用相同的通道還是不同的通道?編輯:根據(jù)快速測試,似乎可以使用來自不同線程的相同通道的并行請求,并且以這種方式進行處理是有道理的。但是,因為在關閉問題之前,我想請專家確認這段代碼是否正確: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條經(jīng)驗 獲得超11個贊
gRPC 使用 HTTP/2 并且可以在一個連接上多路復用多個請求,并且 gRPC 客戶端連接應該在客戶端應用程序的生命周期內重復使用。
如果您在使用數(shù)據(jù)庫時受到啟發(fā),我會說您不必擔心它,因為在使用 gRPC 時不存在打開連接開銷。
添加回答
舉報
0/150
提交
取消