## Compression with gRPC Python gRPC offers lossless compression options in order to decrease the number of bits transferred over the wire. Three levels of compression are available: - `grpc.Compression.NoCompression` - No compression is applied to the payload. (default) - `grpc.Compression.Deflate` - The "Deflate" algorithm is applied to the payload. - `grpc.Compression.Gzip` - The Gzip algorithm is applied to the payload. The default option on both clients and servers is `grpc.Compression.NoCompression`. See [the gRPC Compression Spec](https://github.com/grpc/grpc/blob/master/doc/compression.md) for more information. ### Client Side Compression Compression may be set at two levels on the client side. #### At the channel level ```python with grpc.insecure_channel('foo.bar:1234', compression=grpc.Compression.Gzip) as channel: use_channel(channel) ``` #### At the call level Setting the compression method at the call level will override any settings on the channel level. ```python stub = helloworld_pb2_grpc.GreeterStub(channel) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), compression=grpc.Compression.Deflate) ``` ### Server Side Compression Additionally, compression may be set at two levels on the server side. #### On the entire server ```python server = grpc.server(futures.ThreadPoolExecutor(), compression=grpc.Compression.Gzip) ``` #### For an individual RPC ```python def SayHello(self, request, context): context.set_response_compression(grpc.Compression.NoCompression) return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) ``` Setting the compression method for an individual RPC will override any setting supplied at server creation time.