2017-03-14 5 views
1

私はSucker Punch gemを使って、並行してタスクを処理しようとしています。しかし、私はどのようにその終了を待つドキュメントを発見した。SuckerPunch :: Jobタスクの完了を待ちます

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]}" 

すべてのタスクが完了する前に、SuckerPunch::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}} 

どのようにすべてのタスクが完了するまで待つことができますか?

+0

あなたは 'エンジェルウォーズを試すことができます::カウンターを:: Processed.new(@queue)が –

+0

を.value'か、' all_stats =エンジェルウォーズ:: Queue.stats'その後、 '統計= all_stats [MYJOBを行うことができます統計情報をご確認ください'stats [" jobs "] [" processed "]'現在は 'total'、' processed'、 'busy' ....を見ることができます。 –

答えて

2

あなたは

に状況を確認したり、統計情報を確認することができますが、その後

stats = all_stats[SuckerJob.to_s] 

all_stats = SuckerPunch::Queue.stats 

を行うことができ、あなたはあなたができる

stats["jobs"]["processed"] 

を見ることができます今すぐ入手統計以下のようにチェックしてください

stats["jobs"]["processed"] > 0 
    stats["jobs"]["failed"] == 0 
    stats["jobs"]["enqueued"] == 0 
関連する問題