หลังจากสูญเสียการนอนหลับไปมากโดยพยายามหาตัวอย่างพื้นฐานสำหรับการทำงานในฟิลด์ซ้ำ ๆ ในที่สุดฉันก็ได้รับมัน
ปัญหา:
- สร้างเครื่องคิดเลข.pyที่มีสองฟังก์ชันคือสี่เหลี่ยมและตัวคูณ
- ใช้ GRPC สร้างไฟล์ Proto สำหรับไฟล์เดียวกัน
- เขียนเซิร์ฟเวอร์ไคลเอนต์
- รันเซิร์ฟเวอร์และเรียกใช้ไคลเอ็นต์เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง
ไฟล์ Proto:
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) {}
}
ตอนนี้ส่วนสี่เหลี่ยมเป็นเรื่องง่าย แต่สำหรับตัวคูณฉันต้องการส่งผ่านรายการ Numbers (เช่นเดียวกับประเภท Number ตามที่กำหนดในไฟล์โปรโต)
ปัญหาก็คือด้วยซ้ำฟิลด์ และนี่คือทางออกที่ดีที่สุดในระยะสั้น
การแก้ไขปัญหา:
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)
ฟังก์ชันตัวคูณเครื่องคิดเลข (เนื่องจากจำเป็นต้องแสดง):
def multiplier(numlist, name):
mul = 1
for num in numlist:
mul = mul * num.value
print(f'Result of list {name}')
return mul
หวังว่านี่จะช่วยใครบางคนได้ หวังว่านี่จะเป็นคำอธิบายที่ควรจะเป็น
append()
person.id.append(1)
สิ่งนี้ใช้กับฟิลด์protobuf ใด ๆrepeated