Указатели на использование сельдерея с сорвал-эскизами с удаленными хранилищами?
Я удивлен, что не вижу ничего, кроме "использовать сельдерей" при поиске способов использования сельдерейных заданий с эскизами сортов и 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
в соответствующий заполнитель.
Задача создается при первом запросе эскиза, последующие запросы обрабатываются фиктивным изображением до тех пор, пока рабочий поток не завершится.