Как правильно сделать прогресс выполнения фоновых задач в очередях?

изучаю выполнение фоновых задач через очереди на php, в качестве сервера очередей использую redis

такая задача возникла.. как правильно сделать прогресс выполнения фоновых задач в очередях? например..

  1. конвертация видео в другой формат
  2. сжатие большого изображения
  3. импорт товаров в бд с внешнего api

предполагаю алгоритм зависит от вида задачи...
случай 3: если это импорт..то нужно подсчитать количество рядов в файле,например там 300 строк, в бд добавляем по 100 строк количество итераций=300/100=3 всего 3 итерации: 1-33% 2-66% 3-100%

случай 2 "сжатие большого изображения".. как узнать здесь количество итераций? или в момент запуска воркера,увеличивать счетчик прогресса каждую секунду и записывать/обнволять в бд по id_task значение в поле "progress" , а когда закончит работу обновить значение на 100%

общий алгоритм возможно должен быть похож на это:

function progress(int $total)
{
    echo 'Starting task' . PHP_EOL;
    for ($i = 1; $i <= $total; $i++) {
        $progress = 100 * $i / $total;
        echo $i . '-' . $progress . '%' . PHP_EOL;
        // some heavy task
        sleep(1);
    }
    $progress = 100;
    echo '$progress: ' . $progress . '%' . PHP_EOL;
    echo 'Task completed' . PHP_EOL;
}

progress(10);

Ответы (0 шт):