Ruby 等待SuckPunch::作业任务完成

Ruby 等待SuckPunch::作业任务完成,ruby,concurrency,sucker-punch,Ruby,Concurrency,Sucker Punch,我尝试使用gem并行处理任务。但我没有找到如何等待其终止的文档 require 'sucker_punch' class SuckerJob include SuckerPunch::Job workers 4 def perform(event) sleep(rand(5)) puts "[#{Thread.current.object_id}] End processing event #{event}." end end 10.times { |i

我尝试使用gem并行处理任务。但我没有找到如何等待其终止的文档

require 'sucker_punch'

class SuckerJob
  include SuckerPunch::Job
  workers 4

  def perform(event)
    sleep(rand(5))
    puts "[#{Thread.current.object_id}] End processing event   #{event}."
  end
end

10.times { |i| SuckerJob.perform_async(i) }
puts "Shutting down ..."
SuckerPunch::Queue.shutdown_all
puts "Shutdown finished, status: #{SuckerPunch::Queue.stats[SuckerJob.name]}"
# [Ugly] call internal method
SuckerPunch::Queue::QUEUES.fetch_or_store(SuckerJob.name).wait_for_termination(10)
puts "Wait finished, status: #{SuckerPunch::Queue.stats[SuckerJob.name]}"
似乎,
suckrpunch::Queue.shutdown_all()
在所有任务完成之前返回

Shutting down ...
[17487240] End processing event   1.
[17488760] End processing event   0.
[17487240] End processing event   4.
[17488760] End processing event   5.
[17486120] End processing event   2.
[17484940] End processing event   3.
[17487240] End processing event   6.
Shutdown finished, status: {"workers"=>{"total"=>3, "busy"=>3, "idle"=>0}, "jobs"=>{"processed"=>7, "failed"=>0, "enqueued"=>0}}
[17484940] End processing event   9.
[17488760] End processing event   7.
[17486120] End processing event   8.
Wait finished, status: {"workers"=>{"total"=>0, "busy"=>0, "idle"=>0}, "jobs"=>{"processed"=>10, "failed"=>0, "enqueued"=>0}}
如何等待所有任务完成?

您可以检查状态

或者检查你能做的统计

all_stats = SuckerPunch::Queue.stats 
然后

然后你可以看到你现在得到的统计数据

stats["jobs"]["processed"]  
你可以像下面这样检查

  stats["jobs"]["processed"] > 0
  stats["jobs"]["failed"] == 0
   stats["jobs"]["enqueued"] == 0

您可以尝试
stackpunch::Counter::Processed.new(@queue).value
或检查您可以执行的统计操作
all_stats=stackpunch::queue.stats
然后
stats=all_stats[MyJob.to.\u s]
然后您现在可以看到
stats[“jobs”][“Processed”]
现在有
total
Processed
。。。。
  stats["jobs"]["processed"] > 0
  stats["jobs"]["failed"] == 0
   stats["jobs"]["enqueued"] == 0