我是靠谱客的博主 可耐学姐,这篇文章主要介绍grpc, proto 与 boto3 理解与使用protogRPCBoto3,现在分享给大家,希望可以做个参考。

文章目录

  • proto
    • 一些语法
  • gRPC
  • Boto3

proto

这里主要记录一下python proto 的一些坑

我最疑惑的一些地方在 这里 已被解释。

(暂时总结下不一定正确)
主要关注 --proto_path 的设置
目前发现–proto_path的第一个很重要,决定了生成的python库的引用目录。
proto 里面, import 使用时也要指定 --proto_path

举个例子
proto文件如下

复制代码
1
2
3
4
5
6
python -m grpc_tools.protoc --proto_path=proto --proto_path=proto/common --proto_path=proto/sdk --proto_path=proto/component --python_out=rpc --grpc_python_out=rpc proto/task/detect.proto

最终生成的目录如下

复制代码
1
2
3
4
5
proto/task/detect.proto rpc/task/ detect_pb2_grpc.py detect_pb2.py

调用时

复制代码
1
2
3
4
import sys sys.path.insert(0, 'rpc') from task.detect_pb2 import xxxx

仔细看会看到很多细节,我大概总结一下

  1. 为什么 import 时可以到 task: 因为 第一个 --proto_path proto 和 最后那个.proto文件 的路径配合的
  2. 为什么会输出到 rpc 目录,当然就是由 xxx_out 决定的

一些语法

序列化,反序列化,使用函数

复制代码
1
2
3
4
5
data = arr_resp.SerializeToString() LogLogGroupList = LogGroupList() LogLogGroupList.ParseFromString(data) print(LogLogGroupList)

保存成二进制文件。

gRPC

Python gRPC 入门

按照上面那个例子运行,下面主要讲讲遇到的问题和发现的一些事情

python 中运行 client 有问题,可以加入下面的代码解决

复制代码
1
2
3
os.environ['http_proxy']="" os.environ['https_proxy']=""

生成pb.py文件有以下方式

复制代码
1
2
3
4
1) python -m grpc_tools.protoc -Itmp/ --python_out=tmp --grpc_python_out=tmp tmp/hello.proto 2) python -m grpc_tools.protoc -I./ --python_out=tmp --grpc_python_out=tmp hello.proto 3)python -m grpc_tools.protoc -I./ --python_out=. --grpc_python_out=. ./hello.proto

其中1)在import 时需要 tmp.xxx
3)很直接就是文件都在当前的目录,有些杂乱
2)这个需要把 hello.proto 放在 当前目录下,然后也能够和 1) 一样直接用(这里理解不了)

Boto3

还是会被 proxy 影响

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# pip install boto3 import logging, os import boto3 from botocore import UNSIGNED from botocore.config import Config os.environ['http_proxy']="" os.environ['https_proxy']="" s3_client_config = Config(signature_version=UNSIGNED) endpoint_url = "https://xxx.com" client = boto3.client("s3", endpoint_url=endpoint_url, config=s3_client_config) bucket = "video-chj-v" # 您申请的存储桶 objkey = "test-python.jpg" fjpg = os.path.expanduser('~') + "/tmp/base64.jpg" body = '0123456789' with open(fjpg, "rb") as fp: body=fp.read() # see: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.put_object def put_demo(): try: client.put_object(Bucket=bucket, Body=body, Key=objkey) except Exception as e: logging.error(e) # see: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.get_object def get_demo(): try: response = client.get_object(Bucket=bucket, Key=objkey) print(response["Body"].read().decode("utf-8")) except Exception as e: logging.error(e) # see: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.get_object def get_meta_demo(): try: response = client.get_object(Bucket=bucket, Key=objkey) print(response["ContentType"]) except Exception as e: logging.error(e) if __name__ == '__main__': put_demo() #get_demo() get_meta_demo()

最后

以上就是可耐学姐最近收集整理的关于grpc, proto 与 boto3 理解与使用protogRPCBoto3的全部内容,更多相关grpc,内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部