Class: Kamisama::Task
- Inherits:
-
Object
- Object
- Kamisama::Task
- Defined in:
- lib/kamisama/task.rb
Instance Method Summary collapse
- #alive? ⇒ Boolean
-
#initialize(task_index, block) ⇒ Task
constructor
A new instance of Task.
- #log(message) ⇒ Object
- #restart! ⇒ Object
- #start ⇒ Object
- #terminate! ⇒ Object
Constructor Details
#initialize(task_index, block) ⇒ Task
3 4 5 6 |
# File 'lib/kamisama/task.rb', line 3 def initialize(task_index, block) @task_index = task_index @block = block end |
Instance Method Details
#alive? ⇒ Boolean
39 40 41 42 43 44 |
# File 'lib/kamisama/task.rb', line 39 def alive? Process.getpgid(@pid) true rescue Errno::ESRCH false end |
#log(message) ⇒ Object
46 47 48 |
# File 'lib/kamisama/task.rb', line 46 def log() puts "[WORKER #{@task_index}] #{}" end |
#restart! ⇒ Object
29 30 31 32 33 |
# File 'lib/kamisama/task.rb', line 29 def restart! puts "[Kamisama Master] Restarting Worker." @pid = nil start end |
#start ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/kamisama/task.rb', line 8 def start @pid = Process.fork do begin # receive sigterm when parent dies Kamisama::ProcessCtrl.set_parent_death_signal(:sigterm) log("Worker started. Hello!") @block.call(@task_index) rescue Exception => e # handle all exceptions, even system ones log("Shutting down... #{e.}") exit ensure exit end end Process.detach(@pid) end |
#terminate! ⇒ Object
35 36 37 |
# File 'lib/kamisama/task.rb', line 35 def terminate! Process.kill("TERM", @pid) end |