Некоторые основные вопросы об 'delayed_job'

Я пытаюсь delayed_job сейчас, и у меня есть несколько вопросов.

На странице http://github.com/collectiveidea/delayed_job я вижу некоторую информацию:

Рабочие могут работать на любом компьютере, если у них есть доступ к базе данных и их часы синхронизированы. Имейте в виду, что каждый воркер будет проверять базу данных как минимум каждые 5 секунд.

  1. Когда я вызову rake jobs:work один раз, будет создан ОДИН рабочий процесс, верно?

  2. Когда рабочий процесс проверяет базу данных, он считывает ВСЕ новые и неудачные задачи КАЖДЫЙ РАЗ и запускает их?

  3. он говорит, что воркер будет проверять базу данных каждые 5 секунд, могу ли я сделать это 2 секунды?

  4. Когда я создаю worker(rake jobs:work), в базе уже есть 10 задач, и каждая займет 3 секунды. Сколько процессов создаст DelayedJob? И сколько секунд нужно всего?


person Freewind    schedule 11.07.2010    source источник


Ответы (1)


  1. да
  2. да
  3. Delayed::Worker.sleep_delay = 2
  4. 1 рабочий будет работать над каждой задачей по очереди, сдавая или проваливая ее, прежде чем перейти к следующей. Всего 30 секунд + 9 задержек сна, сколько бы ни длилось общее время (по умолчанию 45 секунд). Я не уверен, как ответить на ваш вопрос о процессах. Создается 1 рабочий процесс. В зависимости от выполняемого задания может быть создано ноль или более других процессов.
person x1a4    schedule 11.07.2010
comment
@x1a4, спасибо. И не могли бы вы увидеть мой обновленный вопрос, есть еще один вопрос :) - person Freewind; 11.07.2010
comment
Есть ли способ ускориться? Я имею в виду, могут ли эти задачи выполняться параллельно? - person Freewind; 11.07.2010
comment
Извините, вопрос 4 был обновлен. На данный момент общее время должно быть 30 секунд, верно? - person Freewind; 11.07.2010
comment
30 секунд плюс время ожидания между каждым заданием (которое по умолчанию составляет дополнительные 45 секунд) - person x1a4; 11.07.2010
comment
30 + 5*9? Вы имеете в виду, что хотя у рабочего есть 10 задач, но он будет спать в течение 5 секунд (по умолчанию) после выполнения каждой задачи? - person Freewind; 11.07.2010
comment
Если в базе 10 задач, сколько задач каждый раз будет получать работа? ОДИН? или ТЕС? - person Freewind; 11.07.2010
comment
Вы имеете в виду, что хотя у рабочего есть 10 задач, но он будет спать в течение 5 секунд (по умолчанию) после выполнения каждой задачи? - Да, точно - person x1a4; 12.07.2010
comment
Если в базе 10 задач, сколько задач каждый раз будет получать работа? ОДИН? или ТЕС? Ок, 10 задач, и вы запускаете 1 воркер. Этот рабочий берет первую незавершенную задачу в очереди, которая настроена на выполнение, и пытается ее выполнить. В случае успеха он записывается и по умолчанию удаляется из очереди. Если это не удается, это записывается, и устанавливается временная метка для следующего запуска. (продолжение в следующем комментарии, хех.) - person x1a4; 12.07.2010
comment
Это первое задание считается «выполненным» на данный момент, и тот же рабочий теперь спит в течение этих 5 секунд по умолчанию, затем берет следующее задание в очереди и запускает его. Таким образом, один и тот же рабочий в конечном итоге попытается выполнить все 10 задач. Если все они пройдены, ни один из них не будет запущен снова. Любая неудавшаяся задача по умолчанию будет предпринята до 20 попыток, прежде чем она будет окончательно провалена. Все это будет делать один рабочий. Если вы используете несколько воркеров, dj будет отслеживать и следить за тем, чтобы несколько воркеров не пытались запустить одно и то же задание (путем блокировки задания, чтобы воркер просто перешел к следующему, если увидит его). - person x1a4; 12.07.2010
comment
Параметр sleep_delay определяет, как часто Delayed_Job проверяет таблицу на наличие новых заданий. Дело не в том, как долго он спит между заданиями. Может, раньше так и работало, но не сейчас. Вы можете указать, сколько заданий DJ извлекает каждый раз при проверке, по умолчанию установлено значение 5. Если вы установите это значение равным 1, то между каждым заданием он будет спать 5 секунд. Если вы читаете 10 заданий каждый раз, в этом случае он вообще не будет спать. - person Lev; 18.02.2015