首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rufus-调度器并发

rufus-调度器并发
EN

Stack Overflow用户
提问于 2016-06-30 01:05:10
回答 2查看 346关注 0票数 1

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

代码语言:javascript
复制
scheduler.every '1m' do
   .....
end

但有时,工作需要超过1分钟才能完成工作。发生的事情是,在他完成之前,Rufus开始了一个新的工作,这在它结束之前就“杀死”了之前的工作。有没有办法让Rufus在开始下一项工作之前完成这项工作?

附言:还在开发中,所以我用的是Webrick

EN

回答 2

Stack Overflow用户

发布于 2016-06-30 02:49:48

您可以为您的任务添加文件锁定检查。有一个让它变得非常简单的宝石:https://github.com/cph/single_file

基本上,您可以将任务包装在SingleFile块中,第一个任务将锁定临时文件。当它计划再次运行时,如果前一个任务仍然在文件上设置了锁(它还没有完成运行),那么该任务将不会在那个时间运行。

代码语言:javascript
复制
include SingleFile

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

Stack Overflow用户

发布于 2016-06-30 05:27:48

Christopher Davies以评论的形式做出了非常好的回应。他指出了“间隔”工作。

https://github.com/jmettraux/rufus-scheduler#in-at-every-interval-cron

你可以这样做

代码语言:javascript
复制
scheduler.interval '1m' do
  # ...
end

为了让rufus-scheduler在每次运行之间间隔1分钟来运行你的块。

如果您深入研究文档,会发现另一种技术:

https://github.com/jmettraux/rufus-scheduler#overlap--false

代码语言:javascript
复制
scheduler.every '1m', overlap: false do
  # ...
end

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

选择适合您需求的技术。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38105983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档