Ruby on rails rufus调度程序并发性

Ruby on rails rufus调度程序并发性,ruby-on-rails,ruby,rufus-scheduler,Ruby On Rails,Ruby,Rufus Scheduler,我正在运行一个ruby on rails应用程序,它需要每分钟执行一项特定任务: scheduler.every '1m' do ..... end 但有时,完成这项工作需要超过1分钟的时间。现在发生的事情是,在他完成之前,鲁弗斯开始了一份新的工作,这在之前的工作结束之前“杀死”了它。 有没有办法让鲁弗斯在开始下一项工作之前先完成这项工作 注:仍在开发中,因此我使用Webrick,您可以为任务添加文件锁定检查。有一个宝石,使它非常容易: 基本上,您可以将任务包装在单个文件块中,第一个任务

我正在运行一个ruby on rails应用程序,它需要每分钟执行一项特定任务:

scheduler.every '1m' do
   .....
end
但有时,完成这项工作需要超过1分钟的时间。现在发生的事情是,在他完成之前,鲁弗斯开始了一份新的工作,这在之前的工作结束之前“杀死”了它。 有没有办法让鲁弗斯在开始下一项工作之前先完成这项工作


注:仍在开发中,因此我使用Webrick,您可以为任务添加文件锁定检查。有一个宝石,使它非常容易:

基本上,您可以将任务包装在单个文件块中,第一个任务将锁定临时文件。当它计划再次运行时,如果上一个任务仍然在文件上放置了一个锁(未完成运行),则该任务将不会在该时间运行

include SingleFile

scheduler.every '1m' do
  with_file_lock("/tmp/magic_is_happening.lock") do
    MagicClass.poof!
  end
end

您可以为任务添加文件锁定检查。有一个宝石,使它非常容易:

基本上,您可以将任务包装在单个文件块中,第一个任务将锁定临时文件。当它计划再次运行时,如果上一个任务仍然在文件上放置了一个锁(未完成运行),则该任务将不会在该时间运行

include SingleFile

scheduler.every '1m' do
  with_file_lock("/tmp/magic_is_happening.lock") do
    MagicClass.poof!
  end
end

克里斯托弗·戴维斯(Christopher Davies)以评论的形式作出的回应非常好。他指的是“间歇”作业

你可以这样做

scheduler.interval '1m' do
  # ...
end
让rufus scheduler在每次运行之间间隔1分钟运行块

如果您进一步深入了解文档,就会发现另一种技术:

调度程序将每分钟检查一次。如果块尚未运行,它将运行它,如果它正在运行,它将不会触发,它将在一分钟后返回并再次检查


选择适合你需要的技巧。

克里斯托弗·戴维斯以评论的形式给出的回答非常好。他指的是“间歇”作业

你可以这样做

scheduler.interval '1m' do
  # ...
end
让rufus scheduler在每次运行之间间隔1分钟运行块

如果您进一步深入了解文档,就会发现另一种技术:

调度程序将每分钟检查一次。如果块尚未运行,它将运行它,如果它正在运行,它将不会触发,它将在一分钟后返回并再次检查


选择适合你需要的技术。

Hm.我不熟悉鲁弗斯,但我做了很多安排。您可以考虑改为执行间隔作业。根据鲁弗斯的文档:
而“每个”作业就像“每10分钟,做这个”,间隔作业就像“做那个,然后等10分钟,然后再做那个,依此类推”
基本上,如果你安排其中一个,它会等那个完成,然后在1米内再安排一次(或者不管你的间隔是什么)。我不熟悉鲁弗斯,但我做了很多安排。您可以考虑改为执行间隔作业。从Rufus的文档中:
而“每个”作业就像“每10分钟,做这个”,间隔作业就像“做那个,然后等10分钟,然后再做那个,依此类推”
基本上,如果你安排其中一个,它会等那个完成,然后在1米内再安排一次(或者无论你的间隔是什么)。