我想在Ruby on Rails中每30分钟安排一次执行。我知道可以使用sleep
。还有其他有效的方法吗?
请注意Cron工作,"每当"宝石不会有用,因为我不希望它只是执行的一部分。一旦sleep
被调用,除了中止之外还有其他任何方法可以将其唤醒吗?
答案 0 :(得分:0)
我相信你可以通过捕捉过程信号来“唤醒它”
trap('INT') do
# do something
end
要唤醒一个线程,你调用'run'方法,即使它处于'sleep'状态,它也会恢复执行
t = Thread.new do
puts 'going to sleep'
sleep 100
loop do
puts '.'
end
end
loop do
sleep 3
puts t.status
t.run
end
您可以对主线程执行相同操作,只需确保使用Thread :: main
获取它Thread.new do
sleep 3
puts Thread::main.status
Thread::main.run
end
puts 'going to sleep'
sleep 100
loop do
puts '.'
end