12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # Copyright 2021 The gRPC Authors
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- """The Python AsyncIO implementation of the gRPC client-side retry example."""
- import asyncio
- import json
- import logging
- import grpc
- helloworld_pb2, helloworld_pb2_grpc = grpc.protos_and_services(
- "helloworld.proto")
- async def run() -> None:
- # The ServiceConfig proto definition can be found:
- # https://github.com/grpc/grpc-proto/blob/ec886024c2f7b7f597ba89d5b7d60c3f94627b17/grpc/service_config/service_config.proto#L377
- service_config_json = json.dumps({
- "methodConfig": [{
- # To apply retry to all methods, put [{}] in the "name" field
- "name": [{
- "service": "helloworld.Greeter",
- "method": "SayHello"
- }],
- "retryPolicy": {
- "maxAttempts": 5,
- "initialBackoff": "0.1s",
- "maxBackoff": "1s",
- "backoffMultiplier": 2,
- "retryableStatusCodes": ["UNAVAILABLE"],
- },
- }]
- })
- options = []
- # NOTE: the retry feature will be enabled by default >=v1.40.0
- options.append(("grpc.enable_retries", 1))
- options.append(("grpc.service_config", service_config_json))
- async with grpc.aio.insecure_channel('localhost:50051',
- options=options) as channel:
- stub = helloworld_pb2_grpc.GreeterStub(channel)
- response = await stub.SayHello(helloworld_pb2.HelloRequest(name='you'))
- print("Greeter client received: " + response.message)
- if __name__ == '__main__':
- logging.basicConfig()
- asyncio.run(run())
|