बार-बार काम करने वाले खेतों के लिए एक मूल उदाहरण प्राप्त करने की कोशिश में बहुत सारी नींद खोने के बाद, मुझे आखिरकार मिल गया।
समस्या:
- दो कार्यों, वर्ग और गुणक के साथ एक कैलकुलेटर थिंकपैड बनाएं।
- जीआरपीसी का उपयोग करके उसी के लिए एक प्रोटो फाइल बनाएं।
- एक सर्वर, एक क्लाइंट लिखें।
- सही परिणाम प्राप्त करने के लिए सर्वर को चलाएं, और क्लाइंट को चलाएं।
प्रोटो फ़ाइल:
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) {}
}
अब वर्ग भाग आसान है, लेकिन गुणक के लिए, मैं संख्याओं की एक सूची (जैसा कि प्रोटो फाइल में परिभाषित संख्या प्रकार में) पास करना चाहता था।
समस्या दोहराया क्षेत्र के साथ थी । और यहाँ संक्षेप में अंतिम समाधान है।
समाधान:
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)
। यह किसी भी प्रोटोबॉफ़repeated
फ़ील्ड के लिए लागू होता है ।