Did you learn to hate protobuf and gRPC as much as I have, at least with Python? Working with gRPC and by extension protobuf is a nightmare.
I like it a lot, especially the implementation of the Java server and the request contexts. We use it with Swift, Java, Kotlin, Python and Typescript for both client-to-service and service-to-service communication, running in GCP. I poked into the guts of the Java impl, made interceptors (context propagation for distributed tracing for example), integration test tooling, configuration loaders (yaml, enforced proto schema), request validators, etc.
Limitations so far:
What made you dislike it on the Python side?
The Python implementation is pretty bad. It relies on shitty code-gen that fails linting/typechecking unless you install a 3rd party plugin (from DropBox), has really weird object behaviors for the message objects (for my usecase I had to write a bunch of code to go from our internal business objects to message objects, which is tedious and shouldn’t be necessary), only supports ThreadPoolExecutor which has some limitations with resource management and is limited by the GIL.