Skip to content

Instantly share code, notes, and snippets.

@sstelfox
Last active August 29, 2015 14:00
Show Gist options
  • Save sstelfox/11151876 to your computer and use it in GitHub Desktop.
Save sstelfox/11151876 to your computer and use it in GitHub Desktop.
class Worker
attr_reader :id
def initialize(id)
@id = id
puts "Spawned new worker with id: #{id}"
end
def dead?
return true if @killed
result = (rand(6) == 0)
puts "#{id} died" if result
result
end
def kill
puts "#{id} killed"
@killed = true
end
def ==(other_val)
return (id == other_val) if other_val.is_a?(Fixnum)
super
end
end
pool = {}
target_number = 5
while true
pool.reject! { |k, v| v.dead? } # Clean out dead workers
pool.each { |k, v| v.id >= target_number && v.kill }
if pool.size < target_number
target_number.times do |n|
next if pool.value?(n)
puts "Failed" if pool[n]
pool[n] = Worker.new(n)
end
end
puts "Active: #{pool.keys.inspect}"
# Adjust how many workers we're rocking
target_number += (rand(3) - 1)
target_number = 0 if target_number < 0
sleep 0.5
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment