Планирование работы после завершения всех работ определенного типа
У меня довольно сложная настройка кэширования и аннулирования, когда мне нужно пересчитать много данных, если конкретный набор данных изменится.
В основном, если одна конкретная запись изменяется, это может создать до 15 заданий для пересчета материала. Во время выполнения этих заданий может произойти изменение другой основной записи. Снова создание нескольких рабочих мест. (Это может произойти одновременно)
Чего мне нужно добиться, так это агрегировать результаты после выполнения заданий. И, вероятно, имеет смысл выполнить эту агрегацию только один раз.
Поэтому мне нужно выполнить одно задание, только один раз после завершения всех остальных заданий.
(Кстати: я использую BCCResqueuBundle)
1 ответ
Вы можете использовать счетчик ссылок и при необходимости объединить его с замком.
Счетчик ссылок сообщает количество асинхронных рабочих. Увеличение при запуске, уменьшение при завершении или неудаче.
Блокировка: либо 1, либо много асинхронных рабочих работают, либо выполняется агрегатное задание. Если вы используете тщательное планирование, вам не нужна блокировка.