2010-07-15 74 views
2

我正在使用Amazon S3服務將不同的目錄(和文件裏面)上傳到不同的存儲桶(目錄 - >存儲桶)。 我在Ruby中編寫代碼,並使用lib http://amazon.rubyforge.org使用Ruby和amazon.rubyforge.org並行上傳到Amazon S3

文件很小(約20KB)。

我要上傳的目錄並行(使用多線程),但我必須使用周圍的S3Object.store

同步
@mutex.synchronize do 
    S3Object.store(s3_obj_name, open(image_name), bucket_name) 
end 

如果我不使用同步我獲得Net::HTTPBadResponse例外!因此,通過同步,我失去了使用並行編程的優勢。

關於如何在平行上傳中取得成功,您有什麼想法嗎?

謝謝 亞歷山德羅DS

回答

4

看來,您所使用的不是線程安全的紅寶石S3庫:http://rubyforge.org/tracker/index.php?func=detail&aid=8162&group_id=2409&atid=9357

所以你的選項包括:

  • 寫補丁對於該庫,以使它線程安全(我不是一個紅寶石的傢伙,不知道這將是多麼困難)
  • 找到另一個S3線程安全的紅寶石庫(我GOOGLE了它,並沒有' t看到任何明顯的東西)
  • 編寫一個簡單的ruby腳本,執行單個S3Object.store調用,並從您的父母ruby腳本執行該腳本。然後每個store()調用將在一個單獨的進程中,並且線程安全問題不會咬你

這些選項假設你想堅持使用ruby。希望有所幫助。