跳转到主要内容

快速从URL下载数据,保证完整性

项目描述

getm:数据URL的快速二进制读取,保证完整性

getm使用多进程共享内存为HTTP URL提供快速二进制读取。

数据在后台进程下载,并以共享内存引用的形式提供。没有缓冲区复制,但调用者必须释放内存引用,这使得使用getm与典型的Python IO流略有不同。但仍然简单,且快速。在部分迭代的情况下,会为您释放内存视图对象。

Python API方法接受一个参数,concurrency,它控制mget的操作模式。

  1. 默认 concurrency == 1:在单个后台进程中下载数据,使用一个在下载过程中保持活跃的HTTP请求。
  2. concurrency > 1:将并发执行多达concurrency个HTTP范围请求,每个请求在一个单独的后台进程中。
  3. 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
包分发 PyPI

错误

请在GitHub上报告错误、问题、功能请求等。

致谢

getm由Brian HannafiousUCSC基因组研究所创建。

特别感谢Michael BaumannLon Blauvelt提供的宝贵意见和测试。

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解安装包的更多信息。

源分发

getm-0.0.5.tar.gz (34.3 kB 查看散列)

上传时间