Есть ли простой способ справиться с параллелизмом BJ

Есть ли способ установить задания в BJ и убедиться, что 2 определенного «типа» не работают одновременно?

У нас работает 24 единорога, и это позволит запустить BJ для каждого из них. Это не имеет большого значения, потому что нам нравится, когда несколько обработчиков заданий отключают фоновую задачу. Исключением является импорт данных. Мы хотим иметь возможность указать ему не запускать более одного из них одновременно.

Возможно ли это в BJ или мы должны просто перейти к чему-то вроде resque?


person Ben    schedule 10.02.2011    source источник


Ответы (1)


Один из способов сделать это — ограничить задания по импорту данных определенным уровнем приоритета, а затем убедиться, что только одно отложенное задание получает задания с таким приоритетом. Например, если вы хотите, чтобы все ваши другие задания выполнялись с приоритетом от 0 до 99, а задания по импорту данных выполнялись с приоритетом 100, то вы могли бы запустить все ваши отложенные рабочие процессы с min_priority от 0 до max_priority 99. и тогда у вас может быть один обработчик отложенных заданий, работающий от min_priority 100 до max_priority 100, гарантируя, что только один обработчик запускает эти задания. Это гарантирует, что никакие два задания импорта данных (приоритет 100) не будут выполняться одновременно.

person Pan Thomakos    schedule 10.02.2011
comment
На самом деле мы используем фоновое задание, а не отложенное задание github.com/jkraemer/bj... это часть вопрос, должны ли мы просто переключиться на отложенную работу или resque - person Ben; 10.02.2011
comment
Определенно. Я не думаю, что вам нужно полностью переходить на Resque. Вы получите массу преимуществ, просто перейдя на DelayedJob. - person davemyron; 10.02.2011
comment
Не похоже, что вы можете запускать BJ с разными уровнями приоритета, поэтому я определенно рекомендую переключиться на delayed_job. Это очень используемый гем, который постоянно обновляется, поэтому поддержка также хорошая. - person Pan Thomakos; 10.02.2011
comment
Старый вопрос. Награждение ответа, так как комментарий далее объясняет ответ, и мы действительно в конечном итоге перешли к спасению. - person Ben; 12.11.2014