Essayez gRPC en Python

Installer gRPC

Tout d'abord, installez gRPC. Il semble que les tampons de protocole, qui sont responsables de la sérialisation de RPC, seront installés avec gRPC.

$ curl -fsSL https://goo.gl/getgrpc | bash -s python

Si vous obtenez l'erreur suivante lors de l'installation, l'homebrew est obsolète et vous devriez essayer brew update. (Pour Mac)

Error: undefined method `desc' for Grpc:Class
Please report this bug:
    http://git.io/brew-troubleshooting
/usr/local/Library/Taps/grpc/homebrew-grpc/Formula/grpc.rb:2:in `<class:Grpc>'
・ ・ ・

Ecrire .proto (IDL)

Écrivez l'IDL pour les tampons de protocole. L'exemple suivant définit un RPC qui pilote le servo.

gRPC lui-même est un plugin pour les tampons de protocole. (Il existe de nombreuses implémentations RPC en plus de gRPC](https://github.com/google/protobuf/wiki/Third-Party-Add-ons#rpc-implementations))

gateway.proto


syntax = "proto3";

package gateway;

message MoveServoRequest {
  int32 servo_id = 1;
  int32 position = 2;
}

message MoveServoResponse {
  int32 current_position = 1;
}

service AVRGateway {
  rpc MoveServo (MoveServoRequest) returns (MoveServoResponse) {}
}

Compilez IDL pour générer un script python gRPC

La commande suivante protoc générera gateway_pb2.py.

$ protoc --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` gateway.proto

Écrire le code serveur / client pour gRPC

Vous pouvez facilement écrire un serveur / client en important le script Python généré par la commande ci-dessus. Puisque la bibliothèque gRPC Python elle-même est toujours version Alpha, diverses méthodes sont préfixées avec early_adopter_ *.

gateway_server.py


import time
import gateway_pb2

class AVRGateway(gateway_pb2.EarlyAdopterAVRGatewayServicer):
  def MoveServo(self, request, context):
    print 'servo_id: %d, position: %d' % (request.servo_id, request.position)
    return gateway_pb2.MoveServoResponse(current_position=150)

def serve():
  server = gateway_pb2.early_adopter_create_AVRGateway_server(AVRGateway(), 9494, None, None)
  server.start()
  try:
    while True:
      time.sleep(100000)
  except KeyboardInterrupt:
    server.stop()

if __name__ == '__main__':
  serve()

gateway_client.py


import gateway_pb2

def run():
  with gateway_pb2.early_adopter_create_AVRGateway_stub('localhost', 9494) as stub:
    response = stub.MoveServo(gateway_pb2.MoveServoRequest(servo_id=1, position=200), 10) 
    print "current position: " + str(response.current_position)

if __name__ == '__main__':
  run()

Courir

Commencez par démarrer le serveur.

$ ls
gateway.proto      gateway_client.py  gateway_pb2.py      gateway_server.py
$ python gateway_server.py

Et le client dans un autre terminal.

$ python gateway_client.py
current position: 150
D0729 10:42:14.835677000 140735135564544 iomgr.c:119] Waiting for 1 iomgr objects to be destroyed and executing final callbacks

Côté serveur

$ python gateway_server.py 
servo_id: 1, position: 200

Si c'est sorti comme ça, c'est OK.

Recommended Posts

Essayez gRPC en Python
GRPC simple en Python
Essayez 9 tranches en Python
Essayez Python
Essayez LINE Notify avec Python
Implémentons Yuma dans Python 3
Essayez d'utiliser LevelDB avec Python (plyvel)
Essayez d'utiliser LeapMotion avec Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
Python> essayez: / sauf:
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Essayez de vous connecter à qiita avec Python
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Essayez de travailler avec des données binaires en Python
Essayez d'envoyer un paquet SYN en Python
Essayez de dessiner une animation simple en Python
Essayez rapidement l'API Face de Microsoft en Python
Essayez de fouiller votre journal avec Python
Essayez un tube de programmation fonctionnel en Python
Essayez quelque chose comme Python for-else dans Ruby
Liste triée en Python