Class: Merb::Worker
- Inherits:
-
Object
- Object
- Merb::Worker
- Defined in:
- merb-core/lib/merb-core/dispatch/worker.rb
Instance Attribute Summary (collapse)
- - (Object) thread private
Class Method Summary (collapse)
-
+ (Boolean) alive?
private
Whether the
Merb::Workerinstance thread is alive. -
+ (Merb::Worker) restart
private
restarts the worker thread.
-
+ (Merb::Worker) start
private
Instance of a worker.
-
+ (Boolean) started?
private
Whether the
Merb::Workerinstance is already started.
Instance Method Summary (collapse)
-
- (Worker) initialize
constructor
private
Creates a new worker thread that loops over the work queue.
-
- (Object) process_queue
private
Processes tasks in the
Merb::Dispatcher.work_queue.
Constructor Details
- (Worker) initialize
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Creates a new worker thread that loops over the work queue.
56 57 58 59 60 61 62 63 |
# File 'merb-core/lib/merb-core/dispatch/worker.rb', line 56 def initialize @thread = Thread.new do loop do process_queue break if Merb::Dispatcher.work_queue.empty? && Merb.exiting end end end |
Instance Attribute Details
- (Object) thread
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
5 6 7 |
# File 'merb-core/lib/merb-core/dispatch/worker.rb', line 5 def thread @thread end |
Class Method Details
+ (Boolean) alive?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Whether the Merb::Worker instance thread is alive
34 35 36 |
# File 'merb-core/lib/merb-core/dispatch/worker.rb', line 34 def alive? started? and @worker.thread.alive? end |
+ (Merb::Worker) restart
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
restarts the worker thread
43 44 45 46 47 48 49 50 |
# File 'merb-core/lib/merb-core/dispatch/worker.rb', line 43 def restart # if we have a worker or thread, kill it. if started? @worker.thread.exit @worker = nil end start end |
+ (Merb::Worker) start
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Instance of a worker.
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'merb-core/lib/merb-core/dispatch/worker.rb', line 11 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 |
+ (Boolean) started?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Whether the Merb::Worker instance is already started.
27 28 29 |
# File 'merb-core/lib/merb-core/dispatch/worker.rb', line 27 def started? !@worker.nil? end |
Instance Method Details
- (Object) process_queue
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Processes tasks in the Merb::Dispatcher.work_queue.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'merb-core/lib/merb-core/dispatch/worker.rb', line 68 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 |