Class: SolidQueue::Pool
Instance Attribute Summary collapse
Instance Method Summary
collapse
#handle_thread_error, #wrap_in_app_executor
Constructor Details
#initialize(size, on_idle: nil) ⇒ Pool
11
12
13
14
15
16
|
# File 'lib/solid_queue/pool.rb', line 11
def initialize(size, on_idle: nil)
@size = size
@on_idle = on_idle
@available_threads = Concurrent::AtomicFixnum.new(size)
@mutex = Mutex.new
end
|
Instance Attribute Details
#size ⇒ Object
Returns the value of attribute size.
7
8
9
|
# File 'lib/solid_queue/pool.rb', line 7
def size
@size
end
|
Instance Method Details
#idle? ⇒ Boolean
37
38
39
|
# File 'lib/solid_queue/pool.rb', line 37
def idle?
idle_threads > 0
end
|
#idle_threads ⇒ Object
33
34
35
|
# File 'lib/solid_queue/pool.rb', line 33
def idle_threads
available_threads.value
end
|
#post(execution) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/solid_queue/pool.rb', line 18
def post(execution)
available_threads.decrement
Concurrent::Promises.future_on(executor, execution) do |thread_execution|
wrap_in_app_executor do
thread_execution.perform
ensure
available_threads.increment
mutex.synchronize { on_idle.try(:call) if idle? }
end
end.on_rejection! do |e|
handle_thread_error(e)
end
end
|