The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
|
2 years ago | |
---|---|---|
.. | ||
README.md | 2 years ago | |
async_greeter_client.py | 2 years ago | |
async_greeter_server_with_interceptor.py | 2 years ago | |
helloworld_pb2.py | 2 years ago | |
helloworld_pb2.pyi | 2 years ago | |
helloworld_pb2_grpc.py | 2 years ago |
README.md
gRPC Python Async Interceptor Example
This example demonstrate the usage of Async interceptors and context propagation using contextvars.
When to use contextvars
Contextvars
can be used to propagate context in a same thread or coroutine, some example usage include:
- Propagate from interceptor to another interceptor.
- Propagate from interceptor to the server handler.
- Propagate from client to server.
How does this example works
This example have the following steps:
- Generate RPC ID on client side and propagate to server using
metadata
.contextvars
can be used here if client and server is running in a same coroutine (or same thead for Sync).
- Server interceptor1 intercept the request, it checks
rpc_id_var
and decorate it with it's tagInterceptor1
. - Server interceptor2 intercept the request, it checks
rpc_id_var
and decorate it with it's tagInterceptor2
. - Server handler receives the request with
rpc_id_var
decorated by both interceptor1 and interceptor2.
How to run this example
- Start server:
python3 -m async_greeter_server_with_interceptor
- Start client:
python3 -m async_greeter_client
Expected outcome
- On client side, you should see logs similar to:
Sending request with rpc id: 59ac966558b3d7d11a06bd45f1a0f89d
Greeter client received: Hello, you!
- On server side, you should see logs similar to:
INFO:root:Starting server on [::]:50051
INFO:root:Interceptor1 called with rpc_id: default
INFO:root:Interceptor2 called with rpc_id: Interceptor1-59ac966558b3d7d11a06bd45f1a0f89d
INFO:root:Handle rpc with id Interceptor2-Interceptor1-59ac966558b3d7d11a06bd45f1a0f89d in server handler.