class Sidekiq::Workers
A worker is a thread that is currently processing a job. Programmatic access to the current active worker set.
WARNING WARNING WARNING
This is live data that can change every millisecond. If you call size
=> 5 and then expect each
to be called 5 times, you're going to have a bad time.
workers = Sidekiq::Workers.new workers.size => 2 workers.each do |process_id, thread_id, work| # process_id is a unique identifier per Sidekiq process # thread_id is a unique identifier per thread # work is a Hash which looks like: # { 'queue' => name, 'run_at' => timestamp, 'payload' => msg } # run_at is an epoch Integer. end
Public Instance Methods
each() { |key, tid, load_json| ... }
click to toggle source
# File lib/sidekiq/api.rb, line 904 def each Sidekiq.redis do |conn| procs = sscan(conn, 'processes') procs.sort.each do |key| valid, workers = conn.pipelined do conn.exists?(key) conn.hgetall("#{key}:workers") end next unless valid workers.each_pair do |tid, json| yield key, tid, Sidekiq.load_json(json) end end end end
size()
click to toggle source
Note that size
is only as accurate as Sidekiq's heartbeat, which happens every 5 seconds. It is NOT real-time.
Not very efficient if you have lots of Sidekiq
processes but the alternative is a global counter which can easily get out of sync with crashy processes.
# File lib/sidekiq/api.rb, line 926 def size Sidekiq.redis do |conn| procs = sscan(conn, 'processes') if procs.empty? 0 else conn.pipelined do procs.each do |key| conn.hget(key, 'busy') end end.map(&:to_i).inject(:+) end end end