mruby-made timer & non-blocking process supervisor, using mruby-fiber, independent from pthread or libuv
Add conf.gem line to build_config.rb
MRuby::Build.new do |conf|
conf.gem :github => 'udzura/mruby-fibered_worker'
end
Please see example
loop = FiberedWorker::MainLoop.new
pid = fork do
loop do
sleep 1
end
end
loop.pid = pid
loop.register_handler(FiberedWorker::SIGINT) do |signo|
puts "Accept #{signo}... exitting"
Process.kill :TERM, pid
end
loop.register_handler(FiberedWorker::SIGRTMIN, false) do |signo|
puts "Hey, this is SIGRTMIN: #{signo}"
end
puts "Kill to: [#{Process.pid}]"
loop.run
puts "Loop exited"
loop = FiberedWorker::MainLoop.new
pid = fork do
loop do
sleep 1
end
end
loop.pid = pid
loop.register_timer(FiberedWorker::SIGRTMIN, 500, 500) do |signo|
puts "Hey, this is SIGRTMIN: #{signo}"
end
loop.register_timer(FiberedWorker::SIGRTMIN+1, 3000) do |signo|
puts "Hey, this is SIGRTMIN+1 then stop: #{signo}"
Process.kill :TERM, pid
end
puts "Parent: [#{Process.pid}]"
loop.run
# killed after 3000ms
puts "Loop exited"
This supervisor should be used under these condition:
- Single-threaded daemon
- Exists only one
mrb_state *
in one process
Under the MIT License: see LICENSE file