Module: Julewire::Core::Scheduling::SharedScheduler

Defined in:
lib/julewire/core/scheduling/shared_scheduler.rb

Constant Summary collapse

THREAD_NAME =
"julewire-deadline-scheduler"

Class Method Summary collapse

Class Method Details

.after_fork!Object



35
36
37
38
39
40
# File 'lib/julewire/core/scheduling/shared_scheduler.rb', line 35

def after_fork!
  previous = @scheduler
  @scheduler = build_scheduler
  previous.kill
  nil
end

.cancel(task) ⇒ Object



30
31
32
33
# File 'lib/julewire/core/scheduling/shared_scheduler.rb', line 30

def cancel(task)
  task&.cancel
  nil
end

.schedule(timeout, &block) ⇒ Object

Raises:

  • (ArgumentError)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/julewire/core/scheduling/shared_scheduler.rb', line 15

def schedule(timeout, &block)
  raise ArgumentError, "block required" unless block

  timeout = Float(timeout)
  if timeout <= 0
    yield
    return
  end

  @scheduler.post(timeout) do
    Thread.current.name = THREAD_NAME
    yield
  end
end