Versuchen Sie gRPC in Python

Installieren Sie gRPC

Installieren Sie zuerst gRPC. Es scheint, dass Protokollpuffer, die für die Serialisierung von RPC verantwortlich sind, zusammen mit gRPC installiert werden.

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

Wenn Sie während der Installation den folgenden Fehler erhalten, ist Homebrew veraltet und Sie sollten versuchen, das Update zu brauen. (Für 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>'
・ ・ ・

Schreiben Sie .proto (IDL)

Schreiben Sie die IDL für Protokollpuffer. Das folgende Beispiel definiert einen RPC, der das Servo antreibt.

gRPC selbst ist ein Plugin für Protokollpuffer. (Neben gRPC gibt es viele RPC-Implementierungen](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) {}
}

Kompilieren Sie IDL, um ein gRPC-Python-Skript zu generieren

Der folgende Befehl "protoc" generiert "gateway_pb2.py".

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

Schreiben Sie Server- / Client-Code für gRPC

Sie können einen Server / Client einfach schreiben, indem Sie das mit dem obigen Befehl generierte Python-Skript importieren. Da die gRPC-Python-Bibliothek selbst [noch Alpha-Version] ist (https://github.com/grpc/grpc/tree/master/src/python), wird verschiedenen Methoden Early_adopter_ * vorangestellt.

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()

Lauf

Starten Sie zuerst den Server.

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

Und der Client in einem anderen 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

Auf der Serverseite

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

Wenn es so ausgegeben wird, ist es OK.

Recommended Posts

Versuchen Sie gRPC in Python
Einfacher gRPC in Python
Probieren Sie 9 Slices in Python aus
Versuchen Sie Python
Versuchen Sie LINE Notify mit Python
Lassen Sie uns Yuma in Python 3 implementieren
Versuchen Sie es mit LevelDB mit Python (plyvel)
Versuchen Sie es mit LeapMotion mit Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
SendKeys in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Python> try: / außer:
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Versuchen Sie, sich mit Python bei qiita anzumelden
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Versuchen Sie, ein SYN-Paket in Python zu senden
Versuchen Sie, eine einfache Animation in Python zu zeichnen
Probieren Sie schnell die Microsoft Face API in Python aus
Versuchen Sie, Ihr Tagebuch mit Python zu durchsuchen
Probieren Sie eine funktionale Programmierpipe in Python aus
Versuchen Sie etwas wie Python für-else in Ruby
Sortierte Liste in Python