Zscheduler
Minimalistic scheduler on top of eventmachine
Why ?
two reasons, the first is that we don't need to give a fuck if eventmachine
reactor is running or not, if its already running we can stop/start the scheduler
w/o affecting it and the second reason is to add some useful
scheduling methods as mentioned below.
Installation
via Gemfile
gem 'zscheduler'
or via terminal
gem install zscheduler
Examples
basic stuff
require 'zscheduler'
Zscheduler.every 10 do
puts "I'm running every 10 seconds!"
end
Zscheduler.join
shutdown hooks
Zscheduler.every 10, on_shutdown: true do
puts "I'm running every 10 seconds and on shutdown!"
end
Zscheduler.add_shutdown_hook do
puts "I'll run only on shutdown"
end
Zscheduler.shutdown # run shutdown hooks and cancel timers
run now and every
Zscheduler.every 10, now: true do
puts "I'll run immediately and every 10 seconds"
end
Zscheduler.join
run it on a thread
Zscheduler.every 10, on_thread: true do
puts "I'm running on a thread every 10 seconds"
end
Zscheduler.join
start the scheduler in a given time
Zscheduler.every(10,start_at: Time.now + 5) do
puts "Will run 5 seconds from now and then for every 10 seconds"
end
# same as above
Zscheduler.every(10,start_in: 5) do
puts "Will run 5 seconds from now and then for every 10 seconds"
end
Zscheduler.join
run something once
Zscheduler.once(Time.now + 10) do
puts "I'm running 10 seconds from now"
end
# Same as above
Zscheduler.once(10) do
puts "I'm running 10 seconds from now"
end
Zscheduler.join
basic duration utils are also included
require 'zscheduler'
require 'zscheduler/core_ext/numeric'
Zscheduler.every 34.seconds do
puts "I'm running every 34 seconds..."
end
Zscheduler.every 17.minutes do
puts "I'm running every 17 minutes..."
end
Zscheduler.every 4.hours do
puts "I'm running every 4 hours..."
end
Zscheduler.join
Coexistence with EventMachine
when it's not running
require 'zscheduler'
EventMachine.reactor_running? # => false
Zscheduler.every 10 do
1 + 1 == 2
end
EventMachine.reactor_running? # => true
Zscheduler.shutdown
EventMachine.reactor_running? # => false
when it's already running
EventMachine.reactor_running? # => true
require 'zscheduler'
Zscheduler.every 30, on_shutdown: true do
puts "Blabla"
end
Zscheduler.shutdown
EventMachine.reactor_running? # => true