开发者社区> 张医博> 正文

性能调优-python SDK 调优

简介: 主要从初始化设置以及问题排查几个方向介绍 python 调优
+关注继续查看

python SDK

python 和 java 或者和 GO ,在性能上来说都不是最好的,而且 python 无法支持多核的并发,只能跑在单核上的多线程。但是 oss 也提供了相应的方法提高多线程的文件吞吐;

初始化

在初始化时 python 有两个地方可以做调整

connect_timeout

可以增大客户端在数据读写过程中的超时时间,常用在客户端到 OSS 公网情况下上传大文件时增长时间,防止在公网抖动或者丢包情况下出现传输超时;

# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

# 设置连接超时时间为30秒。
bucket = oss2.Bucket(auth, endpoint, '<yourBucketName>', connect_timeout=30)
                    

防劫持

OSS 服务端默认支持了泛域名的证书,客户可以用 https 协议传输方式出现被劫持的情况

# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。将 http 改为 https 就是走 https 加密
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

bucket = oss2.Bucket(auth, endpoint, '<yourBucketName>')
                    

性能调优

enable_crc

crc 的作用是校验客户端的文件完整性,文件越大对 cpu 计算消耗越高,上传时间成本越高,所以一般都建议用户端,关闭 crc 提高传输效率,使用 Content-Md5 的方式替代 crc64

# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

bucket = oss2.Bucket(auth, endpoint, '<yourBucketName>', enable_crc=False)

日志开关

OSS 的日志采用 logging 模块采集。通过 ossclient 初始化时 set logging 的开关和存放位置;
但是记录日志的同时会影响 SDK 上传性能,一般不建议用户开启,排查问题时采用到;
平常客户只要记录 requestID 或者 OSS返回的 header 头就足够了;

# -*- coding: utf-8 -*-

import os
import logging
import oss2
from itertools import islice

# 初始化AccessKeyId、AccessKeySecret、Endpoint等信息。
# 请将<AccessKeyId>、<AccessKeySecret>、<Bucket>及<访问域名>分别替换成对应的具体信息。
access_key_id = '<AccessKeyId>'
access_key_secret = '<AccessKeySecret>'
bucket_name = '<Bucket>'
endpoint = '<访问域名>'

log_file_path = "log.log"
# 开启日志
oss2.set_file_logger(log_file_path, 'oss2', logging.INFO)

# 创建Bucket对象。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# 遍历文件目录
for b in islice(oss2.ObjectIterator(bucket), 10):
   print(b.key)
# 获取文件元信息
object_meta = bucket.get_object_meta('object')

分片上传下载

python SDK 在 分片的基础上增加了断点传输,既可以在分片基础上增加并发,也支持断点记录的功能,在遇到网络问题断开时不需要每次从文件开始重传,从记录断点的位置继续传输;

分片大小建议
100M,1M 分片
1000M , 10M 分片
10G , 100M 分片
100G, 1G 分片
....

image.png

断点上传

# -*- coding: utf-8 -*-
import oss2
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
# 当文件长度大于或等于可选参数multipart_threshold(默认值为10MB)时,会使用分片上传。如未使用参数store指定目录,则会在HOME目录下建立.py-oss-upload目录来保存断点信息。
oss2.resumable_upload(bucket, '<yourObjectName>', '<yourLocalFile>')

# 如使用store指定了目录,则保存断点信息在指定目录中。如使用num_threads设置上传并发数,请将oss2.defaults.connection_pool_size设成大于或等于线程数。默认线程数为1。
oss2.resumable_upload(bucket, '<yourObjectName>', '<yourLocalFile>',
    store=oss2.ResumableStore(root='/tmp'),
    multipart_threshold=100*1024,
    part_size=100*1024,
    num_threads=4)

断点下载

# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

# 请将oss2.defaults.connection_pool_size设成大于或等于线程数,并将part_size参数设成大于或等于oss2.defaults.multiget_part_size。
oss2.resumable_download(bucket, '<yourObjectName>', '<yourLocalFile>',
  store=oss2.ResumableDownloadStore(root='/tmp'),
  multiget_threshold=20*1024*1024,
  part_size=10*1024*1024,
  num_threads=3)

ending

如果发现上述方法都试过,但是吞吐率还是上不去,可以用 iftop 命令分析下,并且同时跑多个程序多进程运行将网络带宽打满;
如果多进程也打不满,那就要查自己的机器带宽是否限制了上行流量,或者自己机器带宽被打满;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何制作一个Python SDK并实现私服上传下载
在我们日常工作中,经常需要与上下游交互,特别是当我们做一些基础服务时,需要提供个其他部门使用,因此,需要编写相应的SDK上传至公司私服,供其他部门使用。今天,果冻就来和大家一起实现一个简单的Python SDK,并进行私服的上传和下载。
81 0
【DSW Gallery】使用EAS Python SDK完成模型部署
针对在线推理场景,PAI平台提供了在线预测服务PAI-EAS(Elastic Algorithm Service),支持基于异构硬件(CPU和GPU)的模型加载和数据请求的实时响应。通过PAI-EAS,您可以将模型快速部署为RESTful API,再通过HTTP请求的方式调用该服务。您可以使用EAS提供的Python SDK,来管理PAI-EAS服务。
156 0
【DSW Gallery】使用Python SDK管理DSW实例
PAI DSW提供Python SDK来封装DSW的OpenAPI,使得用户可以用Python代码来管理DSW实例,包括创建、停止、保存、删除、列举等功能。本文也会介绍如何在独占资源组中创建实例。
105 0
HH
物联网平台之python语言的设备端接入、云端sdk集成调用
本文介绍如何调用Python语言的Paho MQTT类库,将设备接入阿里云物联网平台,并进行消息收发。 以及物联网平台提供Python语言的云端SDK供开发人员使用。本文介绍云端Python SDK的安装和配置,及使用Python SDK调用云端API的示例。
264 0
阿里云视觉智能开放平台(VIAPI)人脸属性表情识别Python SDK使用说明
本文为您介绍表情识别RecognizeExpression的语法及示例。
351 0
阿里云机器翻译产品机器批量翻译服务 Python SDK 调用指南
阿里云机器翻译产品下的机器批量翻译服务,支持同时对多段文本进行翻译。本文介绍如何使用机器批量翻译提供的Python SDK,包括SDK的安装方法及SDK代码示例。
194 0
阿里云智能视觉生产图像处理裁剪/尺寸变换Python SDK使用说明
裁剪/尺寸变换用于对输入的图片进行指定尺寸变换,自动判断主体区域位置,使用最佳的裁剪方式完成裁剪。本文介绍如何使用阿里云智能视觉生产图像处理裁剪/尺寸变换Python SDK,包括SDK的安装方法及SDK代码示例。
215 0
Python cos sdk
Python cos sdk
116 0
Python、Java SDK两种方式调用阿里云人脸检测与五官定位
阿里云视觉智能开放平台基于达摩院自研的人脸人体分析技术,提供人脸检测与五官定位、人脸属性识别、人脸比对、人脸搜索、人体检测、人体属性、行为分析等多种功能,为开发者和企业用户提供高性能高可用的人脸人体识别服务。广泛应用于数字门店、楼宇门禁、身份识别、互动娱乐、IPC摄像头、内容广告等领域。此篇文章简单介绍人脸人体与五官定位python,java两种方式调用。
306 0
ubuntu16.04 Inter D415安装指南(SDK+ROS+Python)
ubuntu16.04 Inter D415安装指南(SDK+ROS+Python)
274 0
+关注
张医博
喜欢钻研新的语言,动手实践自己想要学会的知识。
文章
问答
来源圈子
更多
作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。
+ 订阅
相关文档: 迁云实施服务
文章排行榜
最热
最新
相关电子书
更多
给运维工程师的Python实战课
立即下载
Python 脚本速查手册
立即下载
ACE 区域技术发展峰会:Flink Python Table API入门及实践
立即下载