Как правильно сделать прогресс выполнения фоновых задач в очередях?
изучаю выполнение фоновых задач через очереди на php, в качестве сервера очередей использую redis
такая задача возникла.. как правильно сделать прогресс выполнения фоновых задач в очередях? например..
- конвертация видео в другой формат
- сжатие большого изображения
- импорт товаров в бд с внешнего 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);