Tekrarlanan alanlarda çalışma için temel bir örnek almaya çalışırken çok fazla uykuyu kaybettikten sonra, sonunda anladım.
Sorun:
- Kare ve çarpan olmak üzere iki işlevli bir calculator.py oluşturun.
- GRPC kullanarak, bunun için bir Proto dosyası oluşturun.
- Bir sunucu, bir istemci yazın.
- Sunucuyu çalıştırın ve doğru sonuçları almak için istemciyi çalıştırın.
Proto dosyası:
syntax = "proto3";
message Number {
int32 value = 1;
}
message NumList {
string name = 1;
repeated Number nums = 2;
}
service Calculator {
rpc Multiplier(NumList) returns (Number) {}
rpc Square(Number) returns (Number) {}
}
Şimdi kare kısım kolay, ancak Çarpan için bir Sayılar listesi geçirmek istedim (proto dosyasında tanımlandığı gibi Sayı türünde olduğu gibi).
Sorun tekrarlanan alandaydı. Ve işte kısaca nihai çözüm.
Çözüm:
import grpc
import calculator_pb2
import calculator_pb2_grpc
channel = grpc.insecure_channel('localhost:50051')
stub = calculator_pb2_grpc.CalculatorStub(channel)
num_list = calculator_pb2.NumList()
num_list.name = 'MyFirstList'
n1 = num_list.nums.add()
n2 = num_list.nums.add()
n3 = num_list.nums.add()
n1.value = 10
n2.value = 20
n3.value = 30
assert len(num_list.nums) == 3
response = stub.Multiplier(num_list)
print(response.value)
Hesap Makinesi Çarpanı işlevi (çünkü bunun gösterilmesi gerekir):
def multiplier(numlist, name):
mul = 1
for num in numlist:
mul = mul * num.value
print(f'Result of list {name}')
return mul
Umarım bu birine yardımcı olur. Umarım bu olması gerektiği kadar açıklayıcıdır.
append()
, örperson.id.append(1)
. Bu, herhangi bir protobufrepeated
alanı için geçerlidir .