Указатели на использование сельдерея с сорвал-эскизами с удаленными хранилищами?

Я удивлен, что не вижу ничего, кроме "использовать сельдерей" при поиске способов использования сельдерейных заданий с эскизами сортов и S3.

Проблема: использование удаленных хранилищ вызывает значительные задержки при создании эскизов (думаю, 100s + для страницы со многими эскизами), в то время как механизм эскизов загружает оригиналы из удаленного хранилища, сует их, а затем загружает обратно в s3.

Где хорошее место, чтобы настроить задачу сельдерея в sorl, и что я должен назвать?

Приветствуется любой из ваших впечатлений/идей.

Я начну копаться вокруг внутренних компонентов Sorl, чтобы найти более полезное место для задержки этой задачи, но есть еще несколько вещей, которые мне интересны, если это было решено раньше.

  • Какое изображение немедленно возвращается? Sorl нужно как-то сказать, что возвращенный образ не является настоящим миниатюром. Кэш должен быть недействительным, когда сельдерей заканчивает задачу.

  • Обработайте запросы генерации нескольких эскизов (только для первого ключа кеширования нужен только первый)

В настоящее время я временно решил это, используя обратный кэш-сервер nginx, который может обслуживать удары, в то время как бэкэнд тратит время на создание дорогих страниц (изменение размера огромных PNG на огромной сетке продуктов), но это очень ручной процесс.

Ответ 1

Я думаю, что вы хотите сделать THUMBNAIL_BACKEND в пользовательский класс, который переопределяет _ create_thumbnail. Вместо того, чтобы генерировать миниатюру в этой функции, ударьте задачу celery, которая вызывает _create_thumbnail с теми же аргументами, что и функция. Эскиз не будет доступен во время запроса, но он будет генерироваться в фоновом режиме.

Ответ 2

Как я понимаю, Sorl корректно работает с хранилищем S3, но он очень медленный.

Я считаю, что вы знаете, какие размеры изображений вам нужны.

Вы должны запустить задачу сельдерея после загрузки изображения. В задаче, которую вы вызываете sorl.thumbnail.default.backend.get_thumbnail(file, geometry_string, **options)

Sorl создаст миниатюру и загрузит ее на S3. В следующий раз, когда вы запросите изображение из шаблона, оно уже кэшировано и подается непосредственно с серверов Amazon.

чистый способ обработки уменьшенного изображения замещающего объекта во время обработки изображения.

Для этого вам необходимо переопределить бэкэнд Sorl. Добавить новый аргумент в функцию get_thumbnail, например. generate=False. Когда вы вызовете эту функцию из прохода сельдерея generate=True

И в смене функции это логично, поэтому, если большого пальца нет, а generate - True, вы работаете так же, как стандартный бэкэнд, но если generate является ложным, вы возвращаете свое изображение заполнителя с текстом типа "Мы обрабатываем ваше изображение теперь, вернитесь позже" и не называйте backend._create_thumbnail. Вы можете запустить задачу в этом случае, если вы считаете, что эскиз может быть случайно удален.

Я надеюсь, что это поможет

Ответ 3

Вы можете использовать Sorlery. Он объединяет сор и сельдерей для создания эскизов через рабочих. Он очень осторожен, чтобы не делать доступ к файловой системе за пределами рабочего потока.

Миниатюра, возвращенная немедленно (до того, как у работника была возможность), можно контролировать, установив ваш THUMBNAIL_DUMMY_SOURCE в соответствующий заполнитель.

Задача создается при первом запросе эскиза, последующие запросы обрабатываются фиктивным изображением до тех пор, пока рабочий поток не завершится.