1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Add Sidekiq::Launcher, extracted from Sidekiq::CLI.

This is a step forward to run Sidekiq inside a process,
making it more easily to integrate into existing process.
This commit is contained in:
Lin Jen-Shin 2013-01-30 00:15:34 +08:00
parent e2385f41fa
commit f17e94acc8
2 changed files with 33 additions and 9 deletions

View file

@ -18,7 +18,7 @@ end
trap 'USR1' do trap 'USR1' do
Sidekiq.logger.info "Received USR1, no longer accepting new work" Sidekiq.logger.info "Received USR1, no longer accepting new work"
mgr = Sidekiq::CLI.instance.manager mgr = Sidekiq::CLI.instance.launcher.manager
mgr.async.stop if mgr mgr.async.stop if mgr
end end
@ -49,6 +49,7 @@ require 'erb'
require 'sidekiq' require 'sidekiq'
require 'sidekiq/util' require 'sidekiq/util'
require 'sidekiq/launcher'
module Sidekiq module Sidekiq
class CLI class CLI
@ -57,7 +58,7 @@ module Sidekiq
# Used for CLI testing # Used for CLI testing
attr_accessor :code attr_accessor :code
attr_accessor :manager attr_accessor :launcher
attr_accessor :environment attr_accessor :environment
def initialize def initialize
@ -89,21 +90,18 @@ module Sidekiq
logger.info 'Starting processing, hit Ctrl-C to stop' logger.info 'Starting processing, hit Ctrl-C to stop'
end end
@manager = Sidekiq::Manager.new(options) @launcher = Sidekiq::Launcher.new(options)
poller = Sidekiq::Scheduled::Poller.new
begin begin
if options[:profile] if options[:profile]
require 'ruby-prof' require 'ruby-prof'
RubyProf.start RubyProf.start
end end
@manager.async.start launcher.run
poller.async.poll(true)
sleep sleep
rescue Interrupt rescue Interrupt
logger.info 'Shutting down' logger.info 'Shutting down'
poller.async.terminate if poller.alive? launcher.stop
@manager.async.stop(:shutdown => true, :timeout => options[:timeout])
@manager.wait(:shutdown)
# Explicitly exit so busy Processor threads can't block # Explicitly exit so busy Processor threads can't block
# process shutdown. # process shutdown.
exit(0) exit(0)

26
lib/sidekiq/launcher.rb Normal file
View file

@ -0,0 +1,26 @@
require 'sidekiq/util'
require 'sidekiq/manager'
require 'sidekiq/scheduled'
module Sidekiq
class Launcher
attr_reader :manager, :poller, :options
def initialize(options)
@options = options
@manager = Sidekiq::Manager.new(options)
@poller = Sidekiq::Scheduled::Poller.new
end
def run
manager.async.start
poller.async.poll(true)
end
def stop
poller.async.terminate if poller.alive?
manager.async.stop(:shutdown => true, :timeout => options[:timeout])
manager.wait(:shutdown)
end
end
end