python 断点重传_性能调优-python SDK 调优
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 调优相关推荐
- python编程基础_月隐学python第2课
python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...
- 查看Python的版本_查看当前安装Python的版本
一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...
- python断点调试_「Python调试器」,快速定位各种疑难杂症!!!
在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲 ...
- python内存泄漏_诊断和修复Python中的内存泄漏
python内存泄漏 Fugue uses Python extensively throughout the Conductor and in our support tools, due to i ...
- python基本原理概论_怎样开始自学Python?
本人才疏学浅,学识大多浅尝辄止,故文章若有错误,不论是文字笔误还是理解有错,烦请您留言以告知,本人必定感激不尽! **Python分类下的系列文章,不断更新中,如果你迫不及待地想要看看写得如何可以先试 ...
- 如何提高python的运行效率_几个提升Python运行效率的方法之间的对比
在我看来,python社区分为了三个流派,分别是python 2.x组织,3.x组织和PyPy组织.这个分类基本上可以归根于类库的兼容性和速度.这篇文章将聚焦于一些通用代码的优化技巧以及编译成C后性能 ...
- python适用场景_你真的了解Python吗?什么场景使用多线程,什么场景使用多进程?...
引言 涉及并发的场景,大家想到使用多线程或多进程解决并发问题; 一般情况下,解决多并发场景问题,多数语言采用多线程编程模式(线程是轻量级的进程,共用一份进程空间). 也同样适用于Python多并发处理 ...
- java 调用python脚本过程_通过Java调用Python脚本
在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...
- python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)
一.前言 请务必看到最后.Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛.前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视 ...
最新文章
- LeetCode Sort Characters By Frequency
- 【Android 应用开发】Canvas 精准绘制文字 ( 测量文本真实边界 | 将文本中心点与给定中心点对齐 )
- 驱动开发 - WDK 调试及 SVN 环境搭建[转]
- Vue项目实战02 : vue项目刷新当前页面的三种方法
- 程序员修神之路--分布式系统设计理念这么难学?
- java jtable导出txt_如何将jtable中的文本数据保存到文件中
- Android studio 去除软件运行时顶部原有的蓝色/绿色框
- 84相似标准形05——有理标准形的不变因子、矩阵的有理标准形
- SWIFT IOS开发 部分compile error
- 每日一题(开开森森学前端之Object系列)
- 济南清北学堂游记 Day 2.
- request.getContextPath()
- java手机编程软件_手机java编程软件下载
- 防病毒必务宝典—计算机病毒专杀进程列表(转)
- 计算机硬盘上的文件打不开,电脑硬盘打不开怎么办
- 现在还有必要安装第三方杀毒软件吗?
- Python中使用print函数的三种输出方式
- 设计模式——原形模式
- 胡水生:中小型企业如何应对互联网的发展
- SVN版本冲突原因以及详细解决办法