Rufus-scheduler:如何在任何给定时间强制执行一定数量的作业?

时间:2015-05-28 00:28:50

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

这是我的config / initializers目录中的一些文件的示例代码:

scheduler = Rufus::Scheduler.singleton(:max_work_threads => 20)

.
.

job_id = scheduler.every '5s' do
  # do stuff that may take 1 minute or 50 minutes
  method_call_one
  log "method one finished"
  method_call_two
  log "method two finished"
  method_call_three
  log "method three finished, all done!"
end

然而,随着执行的进行,我发现在任何给定时间都有超过20个此类作业正在运行(在运行时填充的超过20个日志文件中未调用最后一个日志记录行)。我误解了rufus是如何工作的吗?请指教。我想要做的就是确保一次运行不超过20个。

编辑:Ruby版本 - ruby​​ 1.9.3p484(2013-11-22)[i386-mingw32] Rails版本 - Rails 3.2.0

编辑2:这是我试图在块的开头插入的内容:

if scheduler.running_jobs.length > MAX_CONCURRENT_STUFF_ALLOWED
  next
end

其中MAX ...是正整数。这似乎没有任何效果。

谢谢!

1 个答案:

答案 0 :(得分:0)

rufus-scheduler中无法设置最大作业,只能设置最大线程数。

您可以通过评估

来确定当前使用的工作线程数
scheduler.work_threads.size

如果您的max_work_threads未得到遵守,请填写详细的问题报告,并在https://github.com/jmettraux/rufus-scheduler/issues

上填写复制步骤

记录https://github.com/jmettraux/rufus-scheduler#schedulerrunning_jobs

也可能有所帮助

我努力让你告诉我你正在使用哪个服务器,因为一些服务器实现启动了多个ruby进程,因此启动了多个调度程序,这可能与你的症状相匹配(在这些情况下锁定帮助https://github.com/jmettraux/rufus-scheduler#lockfile--mylockfiletxt及其兄弟姐妹段。)

  

在运行时填充了超过20个日志文件

您的意思是您的每个rufus-scheduler作业都有自己的日志文件吗?通常每个OS进程有一个或两个日志文件。为什么这个特殊的设置?

感谢您精确沟通,节省时间。