簡體   English   中英

由於 queue_timeout,gRPC 沒有收到響應?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM