class SerialThreadGroup

渡されたブロックを順番に実行するクラス

Constants

QueueExpire

Attributes

max_threads[RW]

ブロックを同時に処理する個数。最大でこの数だけThreadが作られる

Public Class Methods

force_exit!() click to toggle source

全てのserial threadの実行をキャンセルする。終了時の処理用

# File core/serialthread.rb, line 45
def self.force_exit!
  notice "all Serial Thread Group jobs canceled."
  @@force_exit = true end
new(max_threads: 1, deferred: nil) click to toggle source
# File core/serialthread.rb, line 19
def initialize(max_threads: 1, deferred: nil)
  @lock = Monitor.new
  @queue = Queue.new
  @max_threads = max_threads
  @deferred_class = deferred
  @thread_pool = Set.new
end

Public Instance Methods

busy?() click to toggle source

処理中なら真

# File core/serialthread.rb, line 41
def busy?
  @thread_pool.any?{ |t| :run == t.status.to_sym } end
new(proc=Proc.new)
Alias for: push
push(proc=Proc.new) click to toggle source

実行するブロックを新しく登録する

Args

proc

実行するブロック

# File core/serialthread.rb, line 30
def push(proc=Proc.new)
  promise = @deferred_class && @deferred_class.new(true)
  return promise if @@force_exit
  @lock.synchronize{
    @queue.push(proc: proc, promise: promise)
    new_thread if 0 == @queue.num_waiting and @thread_pool.size < max_threads }
  promise
end
Also aliased as: new