class Merb::Worker
Attributes
thread[RW]
:api: private
Public Class Methods
alive?()
click to toggle source
Returns¶ ↑
Whether the Merb::Worker instance thread is alive
:api: private
# File lib/merb-core/dispatch/worker.rb, line 37 def alive? started? and @worker.thread.alive? end
new()
click to toggle source
Creates a new worker thread that loops over the work queue.
:api: private
# File lib/merb-core/dispatch/worker.rb, line 60 def initialize @thread = Thread.new do loop do process_queue break if Merb::Dispatcher.work_queue.empty? && Merb.exiting end end end
restart()
click to toggle source
restarts the worker thread
Returns¶ ↑
- Merb::Worker
-
instance of a worker.
:api: private
# File lib/merb-core/dispatch/worker.rb, line 47 def restart # if we have a worker or thread, kill it. if started? @worker.thread.exit @worker = nil end start end
start()
click to toggle source
Returns¶ ↑
- Merb::Worker
-
instance of a worker.
:api: private
# File lib/merb-core/dispatch/worker.rb, line 12 def start @worker ||= new Merb.at_exit do if Merb::Dispatcher.work_queue.empty? @worker.thread.abort_on_exception = false @worker.thread.raise else @worker.thread.join end end @worker end
started?()
click to toggle source
Returns¶ ↑
Whether the Merb::Worker instance is already started.
:api: private
# File lib/merb-core/dispatch/worker.rb, line 29 def started? !@worker.nil? end
Public Instance Methods
process_queue()
click to toggle source
Processes tasks in the Merb::Dispatcher.work_queue.
:api: private
# File lib/merb-core/dispatch/worker.rb, line 72 def process_queue begin while blk = Merb::Dispatcher.work_queue.pop # we've been blocking on the queue waiting for an item sleeping. # when someone pushes an item it wakes up this thread so we # immediately pass execution to the scheduler so we don't # accidentally run this block before the action finishes # it's own processing Thread.pass blk.call break if Merb::Dispatcher.work_queue.empty? && Merb.exiting end rescue Exception => e Merb.logger.warn! %Q!Worker Thread Crashed with Exception:\n#{Merb.exception(e)}\nRestarting Worker Thread! retry end end