1*cc02d7e2SAndroid Build Coastguard Worker## Compression with gRPC Python 2*cc02d7e2SAndroid Build Coastguard Worker 3*cc02d7e2SAndroid Build Coastguard WorkergRPC offers lossless compression options in order to decrease the number of bits 4*cc02d7e2SAndroid Build Coastguard Workertransferred over the wire. Three levels of compression are available: 5*cc02d7e2SAndroid Build Coastguard Worker 6*cc02d7e2SAndroid Build Coastguard Worker - `grpc.Compression.NoCompression` - No compression is applied to the payload. (default) 7*cc02d7e2SAndroid Build Coastguard Worker - `grpc.Compression.Deflate` - The "Deflate" algorithm is applied to the payload. 8*cc02d7e2SAndroid Build Coastguard Worker - `grpc.Compression.Gzip` - The Gzip algorithm is applied to the payload. 9*cc02d7e2SAndroid Build Coastguard Worker 10*cc02d7e2SAndroid Build Coastguard WorkerThe default option on both clients and servers is `grpc.Compression.NoCompression`. 11*cc02d7e2SAndroid Build Coastguard Worker 12*cc02d7e2SAndroid Build Coastguard WorkerSee [the gRPC Compression Spec](https://github.com/grpc/grpc/blob/master/doc/compression.md) 13*cc02d7e2SAndroid Build Coastguard Workerfor more information. 14*cc02d7e2SAndroid Build Coastguard Worker 15*cc02d7e2SAndroid Build Coastguard Worker### Client Side Compression 16*cc02d7e2SAndroid Build Coastguard Worker 17*cc02d7e2SAndroid Build Coastguard WorkerCompression may be set at two levels on the client side. 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard Worker#### At the channel level 20*cc02d7e2SAndroid Build Coastguard Worker 21*cc02d7e2SAndroid Build Coastguard Worker```python 22*cc02d7e2SAndroid Build Coastguard Workerwith grpc.insecure_channel('foo.bar:1234', compression=grpc.Compression.Gzip) as channel: 23*cc02d7e2SAndroid Build Coastguard Worker use_channel(channel) 24*cc02d7e2SAndroid Build Coastguard Worker``` 25*cc02d7e2SAndroid Build Coastguard Worker 26*cc02d7e2SAndroid Build Coastguard Worker#### At the call level 27*cc02d7e2SAndroid Build Coastguard Worker 28*cc02d7e2SAndroid Build Coastguard WorkerSetting the compression method at the call level will override any settings on 29*cc02d7e2SAndroid Build Coastguard Workerthe channel level. 30*cc02d7e2SAndroid Build Coastguard Worker 31*cc02d7e2SAndroid Build Coastguard Worker```python 32*cc02d7e2SAndroid Build Coastguard Workerstub = helloworld_pb2_grpc.GreeterStub(channel) 33*cc02d7e2SAndroid Build Coastguard Workerresponse = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), 34*cc02d7e2SAndroid Build Coastguard Worker compression=grpc.Compression.Deflate) 35*cc02d7e2SAndroid Build Coastguard Worker``` 36*cc02d7e2SAndroid Build Coastguard Worker 37*cc02d7e2SAndroid Build Coastguard Worker 38*cc02d7e2SAndroid Build Coastguard Worker### Server Side Compression 39*cc02d7e2SAndroid Build Coastguard Worker 40*cc02d7e2SAndroid Build Coastguard WorkerAdditionally, compression may be set at two levels on the server side. 41*cc02d7e2SAndroid Build Coastguard Worker 42*cc02d7e2SAndroid Build Coastguard Worker#### On the entire server 43*cc02d7e2SAndroid Build Coastguard Worker 44*cc02d7e2SAndroid Build Coastguard Worker```python 45*cc02d7e2SAndroid Build Coastguard Workerserver = grpc.server(futures.ThreadPoolExecutor(), 46*cc02d7e2SAndroid Build Coastguard Worker compression=grpc.Compression.Gzip) 47*cc02d7e2SAndroid Build Coastguard Worker``` 48*cc02d7e2SAndroid Build Coastguard Worker 49*cc02d7e2SAndroid Build Coastguard Worker#### For an individual RPC 50*cc02d7e2SAndroid Build Coastguard Worker 51*cc02d7e2SAndroid Build Coastguard Worker```python 52*cc02d7e2SAndroid Build Coastguard Workerdef SayHello(self, request, context): 53*cc02d7e2SAndroid Build Coastguard Worker context.set_compression(grpc.Compression.NoCompression) 54*cc02d7e2SAndroid Build Coastguard Worker return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) 55*cc02d7e2SAndroid Build Coastguard Worker``` 56*cc02d7e2SAndroid Build Coastguard Worker 57*cc02d7e2SAndroid Build Coastguard WorkerSetting the compression method for an individual RPC will override any setting 58*cc02d7e2SAndroid Build Coastguard Workersupplied at server creation time. 59