Выполнение длительного запроса на веб-сервере, что посоветуете?
Иногда возникают задачи выполнить обработку, которая может работать час-другой. Как (методологически) посоветуете реализовывать подобные обработки ? Как посоветуете делать индикацию прогресса/статуса выполнения для пользователя ?
Все это применительно к средним сайтам, которые живут на шаред-хостингах, то есть Из платформ на сегодня рассматриваю php/laravel и python/django (есть проекты на обеих платформах)
Если вы ожидаете серебряной пули, то ее не существует. Важно понимать что это за обработка и почему она занимает столько времени. От этого зависит решение вашей проблемы
Antonio Solo, он такой большой что на это столько времени уходит? я уверен что у вас там несколько шагов:
- получение документа
- распаковка
- обработка множества элементов
по мне так это решается пайплайнами и очередями. Вы запускаете команду одну очередь "обработать файл бла-бла-бла", а с другой стороны висит обработчик. Он получает команду, читает файл, распаковывает его и разбивает на части, отправляя дальше в другие очереди где обработкой занимаются в несколько потоков специализированные воркеры. Дальше в зависимости от логики можно вернуть все результаты через другие очереди, сверив все по correlation token и спокойно завершить процесс.
я их использую в нескольких проектах, но они мне не совсем нравятся.
там такая фишка - у задачи нет идентификатора. то есть после того как ее ставишь в очередь, она считай что попадает в черный ящик. и если у обработчика очереди есть свой идентификатор (например запись в MySQL) - его еще можно вытащить, но если его нет - все печально.
Что бы обеспечить взаимодействие с пользователем нет никаких механизмов, даже нет просто информирования о результате выполнения. приходится делать обертку вокруг их класса.
Ну а главное - это именно очередь, и нет гарантии что задача будет выполняться немедленно. Если логика предполагает отложенную обработку - то еще можно использовать, но если обработку надо запустить "прямо сейчас" - все как-то неудобно