1

私は、スペックアウトした rmbp を処理するのに約 5 時間かかる Ruby スクリプトを持っています。問題: 2 時間以内に必要です。

実行中のコードはスレッドセーフではなく、xlsx 入力から csv ファイルを吐き出します。...サーバー ファームを使用したことはありませんが、非スレッド セーフな Ruby は、そのようなものではないのではないでしょうか (?)。

要するに、サーバー ファームやサービス、または 5 時間かかる Ruby スクリプトを 1 時間か 2 時間未満で処理できる方法はありますか?

4

1 に答える 1

2

HerokuとSidekiqを使用して同様のことを行いました。Herokuは、低コストのコンピューティングのための無料プランとミニプランの両方を提供します。Sidekiqgemを使用すると、作業を複数のワーカーに分割して同時に実行できるため、より速く終了できます。

ボトルネックがどこにあるか知っていますか?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

あなたの労働者はすべての重労働を行い、そのような助けがなければあなたのラップトップよりもほぼ確実に速くなります。

于 2012-12-26T00:10:06.103 に答える