| ## 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. |