使用Ruby和Amazon.rubyforge.org并行上传到AmazonS3
我使用AmazonS3服务将不同的目录(以及其中的文件)上传到不同的存储桶(目录->存储桶)。 我用Ruby编写代码,并且使用lib 这些文件很小(约20KB) 我想并行上传目录(使用多个线程),但我必须在S3Object.store周围使用同步使用Ruby和Amazon.rubyforge.org并行上传到AmazonS3,ruby,amazon-s3,storage,amazon-web-services,Ruby,Amazon S3,Storage,Amazon Web Services,我使用AmazonS3服务将不同的目录(以及其中的文件)上传到不同的存储桶(目录->存储桶)。 我用Ruby编写代码,并且使用lib 这些文件很小(约20KB) 我想并行上传目录(使用多个线程),但我必须在S3Object.store周围使用同步 @mutex.synchronize do S3Object.store(s3_obj_name, open(image_name), bucket_name) end 如果不使用synchronize,我将获得Net::HTTPBadRespo
@mutex.synchronize do
S3Object.store(s3_obj_name, open(image_name), bucket_name)
end
如果不使用synchronize,我将获得Net::HTTPBadResponse
异常!
因此,使用synchronize,我失去了使用并行编程的优势
你对如何成功实现并行上传有什么想法吗
谢谢,,
Alessandro DS您使用的ruby s3库似乎不是线程安全的: 因此,您的选择包括:
- 为该库编写一个补丁,使其线程安全(我不是ruby爱好者,不知道这有多困难)
- 找到另一个线程安全的S3Ruby库(我在谷歌上搜索了它,没有看到任何明显的东西)
- 编写一个简短的ruby脚本,执行单个S3Object.store调用,并从父ruby脚本执行该调用。然后,每个store()调用都将在一个单独的进程中,线程安全问题不会影响您