[英]gRPC not receiving responses due to queue_timeout?
我有一個簡單的 gRPC 客戶端/服務器應用程序。 服務器啟動,客戶端ping(由服務器端代碼驗證); 但是我沒有收到回復。
我將其縮小到服務器端的這一行。 我不確定什么會導致queue_timeout
。 我正在關注這個
.proto
:
1 syntax = "proto3";
2
3 service Pinger {
4 rpc Ping (PingMessage) returns (PongMessage) {}
5 }
6
7 message PingMessage{
8 string message = 1;
9 }
10
11 message PongMessage {
12 string message = 1;
13 }
server.py
:
class Pinger(PingerServicer):
def Ping(self, request, context):
return grpc_service_pb2.PongMessage(message = "pong")
grpc_server_app = Pinger()
client.py
:
class GRPCClient:
def __init__(self):
self.host = "localhost"
self.port = GRPC_PORT
@timeit('grpc')
def send(self, channel):
stub = grpc_service_pb2_grpc.PingerStub(channel)
ping_message = grpc_service_pb2.PingMessage(message = 'ping')
response = stub.Ping(ping_message)
def run(self):
with grpc.insecure_channel(f"{self.host}:{self.port}") as channel:
while True:
self.send(channel)
main.py
17 def grpc_server_wrapper():
18 server = grpc.server(ThreadPoolExecutor(max_workers=2))
19 grpc_service_pb2_grpc.add_PingerServicer_to_server(grpc_server_app, server)
20 server.add_insecure_port('[::]:' + str(GRPC_PORT))
21 server.start()
22 print("Server started, listening on " + str(GRPC_PORT))
23 server.wait_for_termination()
24
25 if __name__ == '__main__':
26 futures = []
27 with ProcessPoolExecutor(max_workers = 2) as executor:
46 futures.append(
47 executor.submit(grpc_client_app.run)
48 )
49
50 futures.append(
51 executor.submit(grpc_server_wrapper)
52 )
56 [f.result() for f in futures]
問題是當客戶端嘗試 ping 時服務器還沒有准備好,因此它會出錯並死掉。 錯誤被進程池吞沒了。
解決方案是在客戶端調用中添加wait_for_ready = True
:
response = stub.Ping(ping_message, wait_for_ready = True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.