日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

go调用python3_在python3中使用google的protobuf以及gRPC-Go语言中文社区

發布時間:2025/3/12 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go调用python3_在python3中使用google的protobuf以及gRPC-Go语言中文社区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下載源代碼:地址

安裝proto

#下載:protoc-3.9.1-linux-x86_64.zip

unzip protoc-3.9.1-linux-x86_64.zip -d protoc-3.9.1-linux-x86_64 # 解壓

mv protoc-3.9.1-linux-x86_64 /usr/local/protoc # 移動

ln -s /usr/local/protoc/bin/protoc /usr/bin/protoc # 建立軟連接

protoc --version # 測試

安裝python的protof 擴展

protoc-3.9.1-linux-x86_64.zip 3 下載

unzip protobuf-python-3.9.1.zip

cd protobuf-3.9.1/python

python3 setup.py build

python3 setup.py test

python3 setup.py install

pip list # 參考protobuf 3.9.1

定義數據類型

syntax = "proto3";

package tutorial;

message searchRequest {

string query = 1;

int32 page_number = 2;

int32 result_per_page = 3;

enum Corpus {

UNIVERSAL = 0;

WEB = 1;

IMAGES =2;

LOCAL = 3;

NEWS = 4;

PRODUCTS = 5;

VIDEO = 6;

}

Corpus corpus = 4;

}

message Person {

string name = 1;

int32 id = 2;

string email = 3;

enum PhoneType {

HOME = 0;

MOBILE = 1;

WORK = 2;

}

message PhoneNumber {

string number = 1;

PhoneType type = 2;

}

repeated PhoneNumber phones = 4;

}

message AddressBook {

repeated Person people = 1;

}

protoc --python_out=./ ./test.proto # 編譯文件

測試案例

from google.protobuf import json_format

from scrapy_crawl.deal.service.proto.test_pb2 import *

person = Person()

person.id = 1

person.name = 'vic'

person.email = '3264245@qq.com'

person.phones.add(number='15901780', type=Person.MOBILE)

print(person.SerializeToString())

person1 = Person()

p1 = person1.ParseFromString(person.SerializeToString())

print(p1)

j1 = json_format.MessageToDict(person1, True)

print(j1)

person2 = Person()

json_format.Parse(json_format.MessageToJson(person1, True), person2)

print(person2)

# 下面是執行結果

b'nx03vicx10x01x1ax0e3264245@qq.com"x0cnx0815901780x10x01'

37

{'name': 'vic', 'id': 1, 'email': '3264245@qq.com', 'phones': [{'number': '15901780', 'type': 'MOBILE'}]}

name: "vic"

id: 1

email: "3264245@qq.com"

phones {

number: "15901780"

type: MOBILE

}

grpc服務

定義test.proto

syntax = "proto3";

package helloworld;

message HelloRequest {

string name = 1;

}

message HelloReply {

string message = 1;

}

service Greeter {

rpc SayHello (HelloRequest) returns (HelloReply) {}

rpc SayHelloAgain(HelloRequest) returns (HelloReply) {}

}

生產gRPC代碼

python3 -m grpc_tools.protoc -I . --python_out=. --grpc_python_out=. helloworld.proto

創建server

import time

from concurrent import futures

from scrapy_crawl.deal.service.proto.test_pb2 import *

from scrapy_crawl.deal.service.proto.test_pb2_grpc import *

class Greeter(GreeterServicer):

def SayHello(self, request, context):

return HelloReply(message='hello world, %s' % request.name)

def SayHelloAgain(self, request, context):

return HelloReply(message='hello world, %s' % request.name)

def main():

print("------")

server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

add_GreeterServicer_to_server(Greeter(), server)

server.add_insecure_port("[::]:50051")

server.start()

try:

while True:

time.sleep(100)

except KeyboardInterrupt:

print("stop")

server.stop(0)

main()

創建client

from scrapy_crawl.deal.service.proto.test_pb2_grpc import *

def run():

channel = grpc.insecure_channel("localhost:50051")

stub = GreeterStub(channel=channel)

r = stub.SayHello(HelloRequest(name='vic'))

print("greeter client received:%s" % r.message)

r = stub.SayHelloAgain(HelloRequest(name='baby'))

print("Greeter client received: %s" % r.message)

run()

錯誤

test_pb2_grpc 引入了test_pb2文件,是絕對路徑引入的,修改為先對路徑即可

參考文檔:參考1

總結

以上是生活随笔為你收集整理的go调用python3_在python3中使用google的protobuf以及gRPC-Go语言中文社区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。