2

Resque、Resque-Status、およびResque-Retryを使用してbkgジョブを処理しています。以下はジョブの例です。4〜5モデルに対してクエリを実行します。今度はResqueよりもスピードが自慢のSidekiqを使ってみたいと思います。

しかしその前に、Railsアプリで次のジョブのベンチマークを行い、後で最もパフォーマンスが高いものを確認したいと思います。

class BkgJob < Resque::JobWithStatus
  extend Resque::Plugins::Retry
  @retry_limit = 3
  @retry_delay = 60

  @queue = :critical

  def perform
    worker_id, station_id, ids = options['worker_id'], options['station_id'], options['ids']
    human_worker = Worker.find(human_worker_id)
    station = Station.find(station_id)
    .....
    .....
  end
end

それで、問題は、上記のジョブクラスをベンチマークする方法、またはメソッドを実行する方法ですか?私はベンチマークの初心者です。

4

1 に答える 1

0

バックグラウンドで実行しているジョブのパフォーマンスは、ResqueまたはSidekiqでほぼ同じになります。ただし、Sidekiqはキューからのジョブの選択がはるかに高速であり、Resqueと比較してはるかにメモリ効率が高くなります。

バックグラウンドジョブのベンチマークは依然として良い考えですが、ジョブのキューイングと実行のプロセス全体ではなく、performメソッド自体のベンチマークのみを行う必要があると思います。次のようなことができます(RSpecの例):

require 'benchmark'

describe 'performance' do
  it 'takes time' do
    options = {'worker_id': 123, 'station_id': 456, 'ids': [1,2,3]}
    puts Benchmark.realtime do
       100.times { BkgJob.new(options).perform }
    end
  end
end
于 2012-05-17T08:44:06.740 に答える