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('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

# 设置连接超时时间为30秒。

bucket = oss2.Bucket(auth, endpoint, '', connect_timeout=30)

防劫持

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

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

import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。将 http 改为 https 就是走 https 加密

endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

bucket = oss2.Bucket(auth, endpoint, '')

性能调优

enable_crc

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

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

import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

bucket = oss2.Bucket(auth, endpoint, '', 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等信息。

# 请将、、及分别替换成对应的具体信息。

access_key_id = ''

access_key_secret = ''

bucket_name = ''

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 分片

....

断点上传

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

import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 当文件长度大于或等于可选参数multipart_threshold(默认值为10MB)时,会使用分片上传。如未使用参数store指定目录,则会在HOME目录下建立.py-oss-upload目录来保存断点信息。

oss2.resumable_upload(bucket, '', '')

# 如使用store指定了目录,则保存断点信息在指定目录中。如使用num_threads设置上传并发数,请将oss2.defaults.connection_pool_size设成大于或等于线程数。默认线程数为1。

oss2.resumable_upload(bucket, '', '',

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('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 请将oss2.defaults.connection_pool_size设成大于或等于线程数,并将part_size参数设成大于或等于oss2.defaults.multiget_part_size。

oss2.resumable_download(bucket, '', '',

store=oss2.ResumableDownloadStore(root='/tmp'),

multiget_threshold=20*1024*1024,

part_size=10*1024*1024,

num_threads=3)

ending

如果发现上述方法都试过,但是吞吐率还是上不去,可以用 iftop 命令分析下,并且同时跑多个程序多进程运行将网络带宽打满;

如果多进程也打不满,那就要查自己的机器带宽是否限制了上行流量,或者自己机器带宽被打满;

python 断点重传_性能调优-python SDK 调优相关推荐

  1. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  2. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  3. python断点调试_「Python调试器」,快速定位各种疑难杂症!!!

    在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲 ...

  4. python内存泄漏_诊断和修复Python中的内存泄漏

    python内存泄漏 Fugue uses Python extensively throughout the Conductor and in our support tools, due to i ...

  5. python基本原理概论_怎样开始自学Python?

    本人才疏学浅,学识大多浅尝辄止,故文章若有错误,不论是文字笔误还是理解有错,烦请您留言以告知,本人必定感激不尽! **Python分类下的系列文章,不断更新中,如果你迫不及待地想要看看写得如何可以先试 ...

  6. 如何提高python的运行效率_几个提升Python运行效率的方法之间的对比

    在我看来,python社区分为了三个流派,分别是python 2.x组织,3.x组织和PyPy组织.这个分类基本上可以归根于类库的兼容性和速度.这篇文章将聚焦于一些通用代码的优化技巧以及编译成C后性能 ...

  7. python适用场景_你真的了解Python吗?什么场景使用多线程,什么场景使用多进程?...

    引言 涉及并发的场景,大家想到使用多线程或多进程解决并发问题; 一般情况下,解决多并发场景问题,多数语言采用多线程编程模式(线程是轻量级的进程,共用一份进程空间). 也同样适用于Python多并发处理 ...

  8. java 调用python脚本过程_通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

  9. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)

    一.前言 请务必看到最后.Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛.前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视 ...

最新文章

  1. LeetCode Sort Characters By Frequency
  2. 【Android 应用开发】Canvas 精准绘制文字 ( 测量文本真实边界 | 将文本中心点与给定中心点对齐 )
  3. 驱动开发 - WDK 调试及 SVN 环境搭建[转]
  4. Vue项目实战02 : vue项目刷新当前页面的三种方法
  5. 程序员修神之路--分布式系统设计理念这么难学?
  6. java jtable导出txt_如何将jtable中的文本数据保存到文件中
  7. Android studio 去除软件运行时顶部原有的蓝色/绿色框
  8. 84相似标准形05——有理标准形的不变因子、矩阵的有理标准形
  9. SWIFT IOS开发 部分compile error
  10. 每日一题(开开森森学前端之Object系列)
  11. 济南清北学堂游记 Day 2.
  12. request.getContextPath()
  13. java手机编程软件_手机java编程软件下载
  14. 防病毒必务宝典—计算机病毒专杀进程列表(转)
  15. 计算机硬盘上的文件打不开,电脑硬盘打不开怎么办
  16. 现在还有必要安装第三方杀毒软件吗?
  17. Python中使用print函数的三种输出方式
  18. 设计模式——原形模式
  19. 胡水生:中小型企业如何应对互联网的发展
  20. SVN版本冲突原因以及详细解决办法

热门文章

  1. Kaggle机器学习入门实战 -- Titanic乘客生还预测
  2. BarTender安装常见问题集结
  3. ASP.NET MVC4 传递Model到View
  4. Linux程序包管理(yum)
  5. 获取站点某一目录下某些文件
  6. smart pointer in gamedev
  7. Windows无法更新的解决办法
  8. Fedora20下安装VLC
  9. flask(一)之路由和视图
  10. linux-常用指令3