Ruby 跟踪者/豆茎异步处理作业

Ruby 跟踪者/豆茎异步处理作业,ruby,asynchronous,beanstalkd,Ruby,Asynchronous,Beanstalkd,好的,我正在用跟踪者和豆茎做一些测试。我的目标是将500kb post请求卸载到队列中,并异步处理它们 到目前为止,在我的测试中,我有一个非常简单的例子 #worker.rb require 'stalker' include Stalker job 'hello' do |args| puts "hi" sleep 1 puts "hello" end 此文件用于添加到队列 # stalker.rb require 'rubygems' require 'stalker' 1

好的,我正在用跟踪者和豆茎做一些测试。我的目标是将500kb post请求卸载到队列中,并异步处理它们

到目前为止,在我的测试中,我有一个非常简单的例子

#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
所以在一个终端我运行

$stack worker.rb
工作1份工作:[你好]

然后我运行跟踪者文件

$ruby stapper.rb

跟踪者几乎像预期的那样立即执行,所以不会对此进行阻止

但是工人需要大约10秒的时间来运行。我真的希望这10个作业的时间更接近1秒,因为我希望它们并行运行

关于下一个最好的步骤有什么建议吗

更新:
我已经意识到我可以从不同的终端运行多个工人,它将更快地处理队列,例如,2个工人将在大约一半的时间内完成处理

stapper.enqueue有3个选项:作业名称字符串、参数哈希、选项哈希。 在选项哈希中,可以传递启动所需的秒数。 例如:


作为提示,您可能想查看我创建的名为的新gem,这是一种更现代的方法,可以使用ruby中的beanstalkd管理异步作业。它遵循一个更干净、resque风格的接口,有一个真正的异步工作线程(使用分叉和多线程实现更快的吞吐量),并且有更好的错误处理和重试支持。在写backburner之前,我已经用了2年跟踪者,因为我想要一个更好的解决方案

它为您提供以下支持:

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

然后,该方法将自动排队到beanstalkd上,并由backburner工作人员异步处理。

Stapper用于排队。这意味着他一次只做一份工作,据我所知,这不是平行的。也许你应该试试别的。根据我的更新,看起来运行多个worker是并行的
SomeObject.async(:pri => 1000, :delay => 2).some_method(1, 2, 3)