grpc, proto 与 boto3 理解与使用

本文详细介绍了Python中使用proto文件生成gRPC客户端和服务端代码的步骤,包括proto_path的配置和import的注意事项。同时,探讨了序列化、反序列化的语法,并分享了在Python环境中配置gRPC client时解决HTTP代理问题的方法。此外,文章还展示了如何使用Boto3库进行Amazon S3操作,包括上传、下载和获取对象元数据,以及如何处理HTTP代理问题。
摘要由CSDN通过智能技术生成

proto

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

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

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

举个例子
proto文件如下

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

最终生成的目录如下

proto/task/detect.proto
rpc/task/
	detect_pb2_grpc.py  
	detect_pb2.py

调用时

import sys
sys.path.insert(0, 'rpc')
from task.detect_pb2 import xxxx

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

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

一些语法

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

data = arr_resp.SerializeToString()
LogLogGroupList = LogGroupList()
LogLogGroupList.ParseFromString(data)
print(LogLogGroupList)

保存成二进制文件。

gRPC

Python gRPC 入门

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

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

os.environ['http_proxy']=""
os.environ['https_proxy']=""

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

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 影响

# 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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值