Close

gRPC и Python

gRPC — это высокопроизводительный фреймворк для удаленного вызова процедур, разработанный компанией Google. Он опубликован под лицензией Apache2.0, код размещен на github и уже собрал больше 20тысяч звезд. gRPC доступен для использования во всех популярных языках программирования и python здесь не исключение. Транспортом служит HTTP/2 а для сериализации данных используется Protocol Buffers.

gRPC очень прост в использовании, в этой статье вы сами в этом убедитесь. Напишем простое клиент-серверное приложение, которое будет вычислять хеш функции от полученных данных.

1. Для начала опишем функции, которые мы хотим вызывать удаленно. Это хеш-функции, подробно про хеширование можно почитать здесь.
В стандартной библиотеке python уже реализованы алгоритмы md5 и sha256.

2. Теперь нам нужно описать формат обмена данными. Для этого используем protocol buffers.
Указываем версию protobuf, описываем типы данных для клиент-серверного взаимодействия. Будем отслыать текстовые данные и получать хеш — значение от этих данных. В нашем случае подойдет тип string. Доступные типы для protocol buffers описаны подробно в документации. Также нужно описать методы нашего сервиса и типы возвращаемых ими результатов в блоке service.

3. Далее нам понадобятся 2 библиотеки:

Первая это сама библиотека для grpc. Вторая — набор примочек для автоматизации разработки. С помощью неё сгенерируем 2 файла:

Файл _pb2.py содержить описание протокола взаимодействия. Файл _pb2_grpc.py хранит классы, которые нужно использовать в сервере и клиенте.

4. Реализуем код сервера
Когда приготовления окончены можем реализовать gRPC сервер. После импортов создадим класс DataHashServicer, унаследовав от datahash_pb2_grpc.DataHashServicer. В методах класса необходимо реализвать обе наши функции.

Затем создаем сам сервер с помощью grpc.server(), прикрепляем к нему наш класс с хандлерами, устанавливаем порт и запускаем.
Я выбрал порт 6066, но вы можете установить любой. Главное, не забыть установить его и в клиентской части.

Запускаем его python server.py и видим привествие.

5. Напишем код клиента
Теперь возьмемся за клиент. После необходимых импортов, нужно открыть канал. Затем подключаем клиент нашего RPC API к этому каналу и вызываем функции, как будто удаленно никуда не обращаемся!

Выполняем:

Вот и всё. Как видите, gRPC и Python очень легко подружить.

Весь исходный код сохранен на github: https://github.com/cybermatt/examples/tree/master/grpc-datahash

В следующий раз я раскажу как добавить трассировку запросов к нашему grpc api.

Полезные ссылки:
1. Официальный туториал: https://grpc.io/docs/tutorials/basic/python.html
2. Protocol-buffers 3 https://developers.google.com/protocol-buffers/docs/proto3

Поделиться: