xref: /aosp_15_r20/external/grpc-grpc/examples/python/compression/README.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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