0

わかりました。StalkerとBeanstalkdでテストを行っています。私の目的は、500kbの投稿リクエストをオフロードして、それらを非同期でキューに入れて処理することです。

これまでのところ、私のテストでは、この非常に単純な例があります。

#worker.rb
require 'stalker'
include Stalker

job 'hello' do |args|
  puts "hi"
  sleep 1
  puts "hello"
end

キューに追加するためのこのファイル

# stalker.rb
require 'rubygems'
require 'stalker'

10.times do 
    Stalker.enqueue('hello')
    puts 'queued'
end

だから私は1つのターミナルで実行します

$ stalk worker.rb
1つの仕事をしている:[こんにちは]

次に、ストーカーファイルを実行します

$ ruby​​ stalker.rb

ストーカーはほぼ瞬時に実行されるため、ブロックされることはありません。

ただし、ワーカーの実行には約10秒かかります。本当に、これらの10個のジョブを並行して実行したいので、これを1秒にはるかに近づけたいと思います。

これを行うための次の最善のステップに関する推奨事項はありますか?

更新:異なる端末から複数のワーカーを実行でき、キューをはるかに高速に処理できることに気付きました。たとえば、2人のワーカーが約半分の時間で処理を実行します。

4

2 に答える 2

1

ヘッドアップとして、私が作成したBackburnerと呼ばれる新しいgemをチェックすることをお勧めします。これは、rubyでbeanstalkdを使用して非同期ジョブを管理するためのより現代的な方法です。よりクリーンなresque風のインターフェイスに従い、真に非同期のワーカー(フォークと複数のスレッドを使用してスループットを大幅に高速化)を備え、エラー処理と再試行のサポートが大幅に向上します。より良い解決策が欲しかったので、バックバーナーを書く前にストーカーを2年間使用していました。

次のようなサポートを提供します。

SomeObject.async(:pri => 1000, :delay => 2).some_method(1, 2, 3)

その後、メソッドは自動的にbeanstalkdにエンキューされ、バックバーナーワーカーによって非同期的に処理されます。

于 2012-11-15T09:36:56.460 に答える
0

Stalker.enqueueは、ジョブ名文字列、引数ハッシュ、オプションハッシュの3つのオプションを取ります。オプションハッシュでは、開始にかかる秒数を渡すことができます。例:

Stalker.enqueue('hello',{},{:delay => 5})
于 2012-11-14T16:55:58.067 に答える