快速从URL下载数据,保证完整性
项目描述
getm:数据URL的快速二进制读取,保证完整性
getm使用多进程和共享内存为HTTP URL提供快速二进制读取。
数据在后台进程下载,并以共享内存引用的形式提供。没有缓冲区复制,但调用者必须释放内存引用,这使得使用getm与典型的Python IO流略有不同。但仍然简单,且快速。在部分迭代的情况下,会为您释放内存视图对象。
Python API方法接受一个参数,concurrency
,它控制mget的操作模式。
- 默认
concurrency == 1
:在单个后台进程中下载数据,使用一个在下载过程中保持活跃的HTTP请求。 concurrency > 1
:将并发执行多达concurrency
个HTTP范围请求,每个请求在一个单独的后台进程中。concurrency == None
:在主进程中读取数据。在此模式下,getm是requests的包装器。
Python API
import getm
# Readable stream:
with getm.urlopen(url) as fh:
data = fh.read(size)
data.release()
# Process data in parts:
for part in getm.iter_content(url, chunk_size=1024 * 1024):
my_chunk_processor(part)
# Note that 'part.release()' is not needed in an iterator context
命令行界面(CLI)
getm https://my-cool-url my-local-file
测试
在测试期间,将生成指向S3和GS存储桶数据的签名URL。每次测试都会重新填充数据。您必须提供读取和写入测试存储桶以及生成签名URL的凭据。
设置以下环境变量为GS和S3测试存储桶的名称,分别
GETM_GS_TEST_BUCKET
GETM_S3_TEST_BUCKET
GCP凭证
在测试期间生成签名URL需要服务帐户凭证,这些凭证通过设置环境变量提供给测试套件。
export GETM_GOOGLE_APPLICATION_CREDENTIALS=my-creds.json
AWS凭证
按照以下说明配置AWS CLI。
安装
pip install getm
共享内存大小测试
在发布之前,应在具有不同共享内存量的系统上执行测试。64M和8G是不错的选择。还强烈建议在共享内存算法和getm
配置的开发工作中进行测试。
在Ubuntu系统上,以及可能的其它Linux系统上,可以使用捆绑的便利脚本dev_scripts/resize_shm.sh
调整共享内存的大小。需要sudo或root权限。
sudo dev_scripts/resize_shm.sh 64M
sudo dev_scripts/resize_shm.sh 8G
sharedmemory回滚到Python 3.7
getm依赖于在Python 3.8中引入的sharedmemory
模块。由于getm的大多数用户依赖于Python 3.7,因此包含了一个sharedmemory
回滚的C扩展。
回滚为getm的代码库添加了显著的复杂性,需要C/C++知识来维护,以及CPython的知识。当足够的getm用户迁移到Python 3.8或更高版本时,它将被删除。
链接
错误
请在GitHub上报告错误、问题、功能请求等。
致谢
getm由Brian Hannafious在UCSC基因组研究所创建。
特别感谢Michael Baumann和Lon Blauvelt提供的宝贵意见和测试。
项目详情
getm-0.0.5.tar.gz散列
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a3492288a920b05e8f71307ed0b9053b33a48cb0e1e712c823b5f87f4fa01da6 |
|
MD5 | a249c97b69961397267007b5a5fb9209 |
|
BLAKE2b-256 | 3e5112572b94c0c403a694da90e9aecfa2bdd794b7d535f0cc6ae8d9f5256336 |