Ruby 跟踪者/豆茎异步处理作业
好的,我正在用跟踪者和豆茎做一些测试。我的目标是将500kb post请求卸载到队列中,并异步处理它们 到目前为止,在我的测试中,我有一个非常简单的例子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
#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)