Skip to content

Instantly share code, notes, and snippets.

@martyMM
Last active December 15, 2015 13:59
Show Gist options
  • Save martyMM/5271674 to your computer and use it in GitHub Desktop.
Save martyMM/5271674 to your computer and use it in GitHub Desktop.
Celluloid thread issue - threads remain after supervisor is killed
require 'rubygems'
require 'celluloid'
class DomainWorker
include Celluloid
include Celluloid::Logger
def work
puts "Working..."
end
end
class DomainSupervisor < Celluloid::SupervisionGroup
end
class DomainManager
def try_pool
puts "Starting pool..."
pool = DomainWorker.pool(size: 5)
puts "Threads: #{Thread.list.count}"
puts "Terminating pool..."
pool.terminate
puts "Threads: #{Thread.list.count}"
end
def try_pool_and_actor
puts "Starting pool..."
pool = DomainWorker.pool
puts "Threads: #{Thread.list.count}"
puts "Terminating pool..."
pool.terminate
puts "Creating actor..."
actor = DomainWorker.new
puts "Threads: #{Thread.list.count}"
puts "Terminating actor..."
actor.terminate
puts "Threads: #{Thread.list.count}"
end
def run
puts "Total Actors: #{Celluloid::Actor.all.count}"
puts "Threads: #{Thread.list.count}"
@supervisor = DomainSupervisor.run!
@supervisor.pool(DomainWorker, :as => :worker, :size => 10)
sleep 5
puts "Threads: #{Thread.list.count}"
10.times do
Celluloid::Actor[:worker].async.work
end
sleep 5
puts "Threads: #{Thread.list.count}"
puts "Finalizing..."
@supervisor.finalize
sleep 5
puts "Threads: #{Thread.list.count}"
puts "Total Actors: #{Celluloid::Actor.all.count}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment