Вот некоторые примеры кода из файла в моей конфигурации директории/инициализаторов:Rufus-scheduler: Как обеспечить выполнение определенного количества заданий, выполняемых в любой момент времени?
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 файлов журналов, заполненных во время выполнения). Я не понимаю, как работает руфус? Пожалуйста, порекомендуйте. Все, что я хочу сделать, это убедиться, что одновременно запускается не более 20.
EDIT: Ruby версии - рубин 1.9.3p484 (2013-11-22) [i386-mingw32] Rails версии - Rails 3.2.0
EDIT 2: Вот то, что я пытался вставить в начале блока:
if scheduler.running_jobs.length > MAX_CONCURRENT_STUFF_ALLOWED
next
end
где MAX ... - положительное целое число. Это просто не имеет никакого эффекта.
Спасибо!
Пожалуйста, разверните свой вопрос, указав код, который вы используете, чтобы подсчитать «сколько заданий работает». Максимальная рабочая нить устанавливает ограничение количества потоков, а не количества заданий. Также просьба указать a) Ruby version b) Rails server (webrick, пассажир, единорог, ...). Без этих фрагментов информации вам сложно помочь. – jmettraux
Итак, вы просто доказали мою точку зрения, я не понимаю Руфуса. Нет другого кода, который я использую для подсчета количества заданий, я думал, что настройка max_work_threads заключается в том, как я должен ее применять. Я обновил вопрос с версиями ruby и rails, соответственно. –
Ответьте на мой вопрос b), это очень важно. Теперь о вашем «И все же, по мере того как выполнение продолжается, я обнаруживаю, что более 20 таких заданий работают в любой момент времени», как вы это обнаружите? – jmettraux