如果Rails Rufus调度程序的重叠变量false和互斥变量存在,那么它会跳过吗?

时间:2016-08-30 22:26:08

标签: ruby-on-rails ruby ruby-on-rails-4 rufus-scheduler

scheduler.every '1m', :overlap => false, :mutex => "my_lock" do
   something...
end

此调度程序的作业是否等待上一次运行完成或跳过,如果它发现上一次运行仍在运行?

1 个答案:

答案 0 :(得分:0)

有两种情况需要考虑,单一流程案例和多流程案例。

当您的Rails使用制作/调优的服务器来使用多个Ruby进程时,就会发生多进程情况。

服务器,我指的是Webrick,Unicorn,Passenger,Puma等......

在这两种情况下,都会在互斥锁之前考虑重叠。

在单个进程的情况下,overlap => false将首先启动,调度程序将跳过传入的重叠作业。然后将考虑互斥锁(如果作业不重叠)并且可能使作业等待,直到相同作业的实例或指向同一互斥锁的作业实例释放互斥锁。

在多进程的情况下,您可能最终在每个Ruby进程中都有一个调度程序,并且overlapmutex可能出现而不被尊重,而,在他们的本地Ruby流程中,他们是,但由于每个调度程序都有多个进程...

如果你有一台服务器为你提供了多个Ruby进程,而你想让一个rufus-scheduler处理它的工作,你必须阅读https://github.com/jmettraux/rufus-scheduler#lockfile--mylockfiletxthttps://github.com/jmettraux/rufus-scheduler#scheduler_lock还有多个专用的stackoverflow问题这个主题。