这是我的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 ...是正整数。这似乎没有任何效果。
谢谢!
答案 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进程有一个或两个日志文件。为什么这个特殊的设置?
感谢您精确沟通,节省时间。