从 Python 的 Amazon S3 获取大量文件(相对较小的 10-50kB)的最快方法是什么?(大约 200,000 - 百万个文件)。
目前我正在使用 boto 生成签名 URL,并使用 PyCURL 来一一获取文件。
某种类型的并发会有所帮助吗?PyCurl.CurlMulti 对象?
我愿意接受所有建议。谢谢!
从 Python 的 Amazon S3 获取大量文件(相对较小的 10-50kB)的最快方法是什么?(大约 200,000 - 百万个文件)。
目前我正在使用 boto 生成签名 URL,并使用 PyCURL 来一一获取文件。
某种类型的并发会有所帮助吗?PyCurl.CurlMulti 对象?
我愿意接受所有建议。谢谢!
我对python一无所知,但一般来说,您希望将任务分解成更小的块,以便它们可以同时运行。您可以按文件类型、字母顺序或其他方式将其分解,然后为分解的每个部分运行单独的脚本。
您可能会考虑使用s3fs,并仅从 Python 运行并发文件系统命令。
我一直在使用带有 twisted 的 txaws 来进行 S3 工作,尽管您可能想要的只是获取经过身份验证的 URL 并使用 twisted.web.client.DownloadPage(默认情况下会很高兴地从流转到文件而无需太多交互)。
Twisted 可以轻松地以您想要的任何并发运行。对于大约 200,000 的东西,我可能会制作一个生成器并使用一个合作器来设置我的并发性,然后让生成器生成每个所需的下载请求。
如果您不熟悉twisted,您会发现该模型需要一些时间来适应,但它非常值得。在这种情况下,我希望它占用最少的 CPU 和内存开销,但您必须担心文件描述符。如果您发现自己需要更多的文件描述符,或者如果您有多个连接,您希望将其拉下,则可以很容易地混合透视代理并将工作分配给多台机器。
线程+队列呢,我喜欢这篇文章:Practical threaded programming with Python
每项工作都可以使用适当的工具完成:)
您想使用 python 进行 S3 压力测试 :),所以我建议找到一个大容量下载程序并传递链接。
在 Windows 上,我有安装 ReGet 程序(共享软件,来自http://reget.com)和通过 COM 接口创建下载任务的经验。
当然也可能存在其他具有可用界面的程序。
问候!