2012-12-25 13 views
1

我有一個ruby腳本,需要大約5個小時才能關閉我的specul-out rmbp。問題:我們需要在2小時內完成。服務器羣和/或用於快速運行ruby腳本的其他解決方案

正在運行的代碼是非線程安全的,並從xlsx輸入中吐出一個csv文件。 ...我從來沒有使用服務器農場,但我猜測非線程安全的紅寶石並不完全是他們的東西(?)

總之,是否有任何種類的服務器場或服務或任何方式我只能在不到一個小時或兩個小時的時間內完成一個需要5個小時的ruby腳本?

+0

「rmbp」,你的意思是「帶Retina Display的MacBook Pro」嗎?筆記本電腦運行速度不如桌面型號;他們爲了便攜性而犧牲性能。你運行了一個[profiler](https://github.com/rdp/ruby-prof)來查看最常用的塊在哪裏,它是否有意義,它們很慢? –

+0

嗨田滿,謝謝你的迴應。腳本本身很有效率。因爲在假期,我只能訪問親戚的桌面,這比我的筆記本電腦慢。從長遠來看,我非常希望尋求一種超越標準桌面電腦所能做到的並行選擇。 – PlankTon

+3

您確實需要將任務分解爲更多的子任務。當你運行一個單獨的ruby進程時,你將在單核上運行它。即使你多線程。如果您可以將任務分解爲4個子任務,並在單獨的進程中運行它們,例如,由於具有多核優勢,您已經獲得了顯着的性能提升。 – Casper

回答

2

我用Heroku和Sidekiq做過類似的事情。 Heroku爲低成本計算提供free and mini-plans,而Sidekiq gem可讓您將工作分配給多個工作人員,讓他們同時運行,從而更快地完成工作。

你知道你的瓶頸在哪裏嗎?它是XLSX文件的輸入還是輸出到CSV?如果是後者,請將您的XLSV文件以及它的塊位傳送給Sidekiq工作人員。

例如,你可以在你的XLSX文件拆分爲1000行的塊,然後

rows.each do |row| 
    MySidekiqWorker.perform_async(row) 
end 

和你MySidekiqWorker可能看起來像:

class MySidekiqWorker 
    include Sidekiq::Worker 

    def perform(row) 
    # append processed data to CSV 
    end 
end 

你的員工做所有的繁重和幾乎肯定會比沒有這種幫助的筆記本電腦更快。

相關問題