Class: BlackCompany::Pool
- Inherits:
-
Object
- Object
- BlackCompany::Pool
- Defined in:
- lib/black_company/pool.rb
Constant Summary collapse
- DEFAULT_POOL_SIZE =
20
Instance Attribute Summary collapse
-
#exeption_handlers ⇒ Object
readonly
Returns the value of attribute exeption_handlers.
-
#workhorse_class ⇒ Object
readonly
Returns the value of attribute workhorse_class.
Instance Method Summary collapse
- #count ⇒ Object (also: #size)
- #fire(count) ⇒ Object
- #hire(count) ⇒ Object
-
#initialize(pool_size: DEFAULT_POOL_SIZE, queue_size: nil, workhorse_class: Workhorse, exeption_handlers: []) ⇒ Pool
constructor
A new instance of Pool.
- #inspect ⇒ Object
- #on_exeption(&block) ⇒ Object
- #queued_tasks_size ⇒ Object
- #quit ⇒ Object
- #receive(task_content = nil, &block) ⇒ Object
Constructor Details
#initialize(pool_size: DEFAULT_POOL_SIZE, queue_size: nil, workhorse_class: Workhorse, exeption_handlers: []) ⇒ Pool
Returns a new instance of Pool.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/black_company/pool.rb', line 11 def initialize( pool_size: DEFAULT_POOL_SIZE, queue_size: nil, workhorse_class: Workhorse, exeption_handlers: [] ) @queue = queue_size ? SizedQueue.new(queue_size) : Queue.new @fired_queue = Queue.new @workhorse_class = workhorse_class @exeption_handlers = exeption_handlers @workhorses = [] hire(pool_size) end |
Instance Attribute Details
#exeption_handlers ⇒ Object (readonly)
Returns the value of attribute exeption_handlers.
9 10 11 |
# File 'lib/black_company/pool.rb', line 9 def exeption_handlers @exeption_handlers end |
#workhorse_class ⇒ Object (readonly)
Returns the value of attribute workhorse_class.
9 10 11 |
# File 'lib/black_company/pool.rb', line 9 def workhorse_class @workhorse_class end |
Instance Method Details
#count ⇒ Object Also known as: size
27 28 29 |
# File 'lib/black_company/pool.rb', line 27 def count @workhorses.count end |
#fire(count) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/black_company/pool.rb', line 32 def fire(count) count.times { @queue.push(Event.new(:terminate, @fired_queue)) } fired_count = 0 while fired_count != count workhorse = @fired_queue.pop workhorse.join @workhorses.delete(workhorse) fired_count += 1 end true end |
#hire(count) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/black_company/pool.rb', line 45 def hire(count) workhorses = Array.new(count) { hire_one } @workhorses.concat(workhorses) true end |
#inspect ⇒ Object
52 53 54 55 56 57 |
# File 'lib/black_company/pool.rb', line 52 def inspect "#<#{self.class}:0x%014x " \ "@count=#{count} " \ "@workhorse_class=#{workhorse_class} " \ "@queued_tasks_size=#{queued_tasks_size}>" % [object_id] end |
#on_exeption(&block) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/black_company/pool.rb', line 59 def on_exeption(&block) @exeption_handlers << block @workhorses.each { |w| w.on_exeption(&block) } true end |
#queued_tasks_size ⇒ Object
70 71 72 |
# File 'lib/black_company/pool.rb', line 70 def queued_tasks_size @queue.size end |
#quit ⇒ Object
74 75 76 |
# File 'lib/black_company/pool.rb', line 74 def quit fire(count) end |
#receive(task_content = nil, &block) ⇒ Object
66 67 68 |
# File 'lib/black_company/pool.rb', line 66 def receive(task_content = nil, &block) @queue.push(Event.new(:perform, Task.new(task_content, &block))) end |