1

Beanstalkdキューから一度に複数のジョブを予約する方法はありますか?

クエリごとに最大10件の結果を返すことができる外部APIにリクエストを送信しています。それらは私が毎日行うことができるリクエストの数を制限するので、リクエストごとに得られる結果が多いほど良いです。

ドキュメントでこの機能についての言及が見つからなかったため、この回避策を使用しています。誰かがこれを達成するためのより良い方法を知っていますか?または、おそらくbeanstalkdよりも仕事に適したツールですか?

loop do
  sleep(0.3)

  while @beanstalk.tubes[example].peek(:ready)
    jobs = []

    catch(:done) do
      10.times do |i|
        if @beanstalk.tubes[example].peek(:ready) then
          job = @beanstalk.tubes[example].reserve(0)
          jobs << job.body
          job.delete
        else
          throw(:done)
        end
      end
    end

    process(jobs)

  end
end
4

1 に答える 1

4

reserve これらのジョブを削除または解放する前に、連続して複数回呼び出すことにより、複数のジョブを同時に予約できます。

提供したコードサンプルに基づくと、おおよそ次のようになります。

loop do
  timeout = nil
  jobs = []

  begin
    10.times do |i|
      jobs << @beanstalk.tubes[example].reserve(timeout)
      timeout = 0
    end
  rescue Beaneater::TimedOutError
    # nothing to do
  end

  process(jobs.map{|j| j.body})

  jobs.map do |job|
    job.delete
  end
end
于 2013-01-15T04:00:59.067 に答える