You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

50 lines
1.4 KiB

  1. from concurrent.futures import ThreadPoolExecutor
  2. import grpc
  3. import calculator_pb2 as stub
  4. import calculator_pb2_grpc as service
  5. import math
  6. SERVER_ADDR = '0.0.0.0:1234'
  7. class Calculator(service.CalculatorServicer):
  8. def Add(self, request, context):
  9. a = request.a
  10. b = request.b
  11. print(f'Add({a}, {b})')
  12. return stub.FloatResponse(ans=a+b)
  13. def Substract(self, request, context):
  14. a = request.a
  15. b = request.b
  16. print(f'Substract({a}, {b})')
  17. return stub.FloatResponse(ans=a-b)
  18. def Multiply(self, request, context):
  19. a = request.a
  20. b = request.b
  21. print(f'Multiply({a}, {b})')
  22. return stub.FloatResponse(ans=a*b)
  23. def Divide(self, request, context):
  24. a = request.a
  25. b = request.b
  26. print(f'Divide({a}, {b})')
  27. try:
  28. return stub.FloatResponse(ans=a/b)
  29. except Exception as e:
  30. return stub.FloatResponse(ans=math.nan)
  31. if __name__ == '__main__':
  32. try:
  33. server = grpc.server(ThreadPoolExecutor(max_workers=30))
  34. service.add_CalculatorServicer_to_server(Calculator(), server)
  35. server.add_insecure_port(SERVER_ADDR)
  36. server.start()
  37. print(f'listening on {SERVER_ADDR}')
  38. server.wait_for_termination()
  39. except KeyboardInterrupt:
  40. print('Interrupted by user. Shutting down...')