--Erstellen Sie einen einfachen gRPC-Prozess in Python. --Versuchen Sie, einen Prozess zu erstellen, der einen Wert anfordert und das Ergebnis wie REST zurückgibt.
Mit pip installieren
$ pip install grpcio-tools
simple.proto
syntax = "proto3";
package simple;
// request
message SimpleRequest{
string name = 1;
string msg = 2;
}
// response
message SimpleResponse{
string reply_msg = 1;
}
// interface
service SimpleService{
rpc SimpleSend (SimpleRequest) returns (SimpleResponse) {}
}
Erstellen Sie die folgende Quelle und führen Sie sie aus. (kompilieren)
Simple_pb2.py
und simple_pb2_grpc.py
werden im selben Ordner erstellt.
codegen.py
from grpc.tools import protoc
protoc.main(
(
'',
'-I.',
'--python_out=.',
'--grpc_python_out=.',
'simple.proto',
)
)
Lauf
$ python codegen.py
Serverseite
server.py
import grpc
import time
import simple_pb2
import simple_pb2_grpc
from concurrent import futures
class SimpleServiceServicer(simple_pb2_grpc.SimpleServiceServicer):
def __init__(self):
pass
def SimpleSend(self, request, context):
print('logging: name {}, msg {}'.format(request.name, request.msg))
#Übereinstimmung mit Antwort in der Protodatei
return simple_pb2.SimpleResponse(
reply_msg = 'Hello! ' + request.name + '. Your message is ' + request.msg
)
# start server
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
simple_pb2_grpc.add_SimpleServiceServicer_to_server(SimpleServiceServicer(), server)
server.add_insecure_port('[::]:5051')
server.start()
print('run server')
# wait
try:
while True:
time.sleep(3600)
except KeyboardInterrupt:
# stop server
server.stop(0)
SimpleResponse
in simple_pb2
definiert ist, wird die Antwort von dort zurückgegeben.Client-Seite
client.py
import grpc
import simple_pb2
import simple_pb2_grpc
with grpc.insecure_channel('localhost:5051') as channel:
stub = simple_pb2_grpc.SimpleServiceStub(channel)
name = "Tom"
msg = "Test"
response = stub.SimpleSend(simple_pb2.SimpleRequest(name=name, msg=msg))
print('Reply: ', response.reply_msg)
SimpleRequest
verwendet Name und Nachricht als Argumente. Bild, das an es übergeben wird und eine Klasse generiertSimpleSend
-Funktion von stub auf und übergeben Sie die generierte Klasse als Argument
--Ausgabe von reply_msg in der Antwort enthaltenServer starten
$ python server.py
run server
Client-Ausführung
$ python client.py
Reply: Hello! Tom. Your message is Test
Process finished with exit code 0
C:\Users\grpc Verzeichnis
2020/01/21 17:47 <DIR> .
2020/01/21 17:47 <DIR> ..
2020/01/21 17:45 327 client.py
2020/01/21 14:31 173 codegen.py
2020/01/21 17:47 851 server.py
2020/01/21 17:43 300 simple.proto
2020/01/21 17:43 4,212 simple_pb2.py
2020/01/21 17:43 1,342 simple_pb2_grpc.py
.Proto-Datei
syntax = "proto3";
package simple;
// request
message SimpleRequest{
}
// response
message SimpleResponse{
repeated string msgs = 1; //Verwenden Sie wiederholt
}
// interface
service SimpleService{
rpc simple_send (SimpleRequest) returns (SimpleResponse) {}
}
Serverseite
Server, der eine Liste zurückgibt
import grpc
import time
import simple_iter_pb2
import simple_iter_pb2_grpc
from concurrent import futures
class SimpleServiceServicer(simple_iter_pb2_grpc.SimpleServiceServicer):
def __init__(self):
pass
def simple_send(self, request, context):
sample_data = ['message1', 'message2']
return simple_iter_pb2.SimpleResponse(msgs=sample_data) #Vergessen Sie nicht den Listennamen
# start server
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
simple_iter_pb2_grpc.add_SimpleServiceServicer_to_server(SimpleServiceServicer(), server)
server.add_insecure_port('[::]:5051')
server.start()
print('run server')
# wait
try:
while True:
time.sleep(3600)
except KeyboardInterrupt:
# stop server
server.stop(0)
.Proto-Datei
syntax = "proto3";
package simple;
// request
message SimpleRequest{
}
// response
message SimpleResponse{
map<string, string> msg = 1; //Karte verwenden
}
// interface
service SimpleService{
rpc simple_send (SimpleRequest) returns (SimpleResponse) {}
}
Server weggelassen
Die folgenden Artikel waren sehr hilfreich. Es gibt eine detailliertere Beschreibung.
Recommended Posts