11

sorl-thumbnails と S3 でセロリ タスクを使用する方法を検索すると、「セロリを使用する」以外に何も表示されないことに驚いています。

問題: リモート ストレージを使用すると、サムネイル エンジンがリモート ストレージからオリジナルをダウンロードし、それらをクランチしてから s3 にアップロードする間、サムネイルを生成するときに大幅な遅延が発生します (多くのサムネイルを含むページの場合は 100 秒以上と考えてください)。

sorl 内でセロリ タスクをセットアップするのに適した場所はどこですか?また、何を呼び出す必要がありますか?

あなたの経験/アイデアは大歓迎です。

このタスクを遅らせるためのより便利な場所を見つけるために、Sorl の内部を掘り下げ始めますが、これが以前に解決されているかどうかについて、他にもいくつか気になることがあります。

  1. すぐに返される画像は何ですか? 返された画像が実際のサムネイルではないことを Sorl に伝える必要があります。セロリがタスクを終了したら、キャッシュを無効にする必要があります。

  2. 複数のサムネイル生成リクエストをきれいに処理します (特定のキャッシュ キーに対して最初の 1 つだけが必要です)。

今のところ、ヒットを提供できる nginx リバース プロキシ キャッシュを使用して一時的にこれを解決しましたが、バックエンドは高価なページの生成 (巨大な製品グリッドでの巨大な PNG のサイズ変更) に時間を費やしていますが、これは非常に手作業のプロセスです。

4

3 に答える 3

4

THUMBNAIL_BACKENDを、 _create_thumbnailメソッドをオーバーライドするカスタムクラスに設定することをお勧めします。その関数でサムネイルを生成する代わりに、関数に指定されたのと同じ引数を使用して_create_thumbnailを呼び出すセロリタスクを開始します。サムネイルはリクエスト中は利用できませんが、バックグラウンドで生成されます。

于 2012-06-14T18:16:45.717 に答える
4

私が理解しているように、Sorl は S3 ストレージで正しく動作しますが、非常に遅いです。

必要な画像サイズはご存じだと思います。

イメージがアップロードされた後、セロリ タスクを起動する必要があります。呼び出すタスクで sorl.thumbnail.default.backend.get_thumbnail(file, geometry_string, **options)

Sorl はサムネイルを生成し、S3 にアップロードします。次にテンプレートから画像をリクエストすると、画像はすでにキャッシュされており、Amazon のサーバーから直接提供されます

画像の処理中にプレースホルダーのサムネイル画像を処理するクリーンな方法。

このためには、Sorl バックエンドをオーバーライドする必要があります。get_thumbnail関数に新しい引数を追加しますgenerate=False。セロリパスからこの関数を呼び出すときgenerate=True

関数の変更はロジックなので、thumb が存在せずgenerateTrue の場合は標準のバックエンドと同じように動作しますが、generatefalse の場合はプレースホルダーの画像を"We process your image now, come back later" のようなテキストで返します。コールbackend._create_thumbnail。この場合、サムネイルが誤って削除される可能性があると思われる場合は、タスクを起動できます。

これが役立つことを願っています

于 2012-06-15T09:32:59.837 に答える
3

ソーラリーを使用できます。sorl と celery を組み合わせて、ワーカーを介してサムネイルを作成します。ワーカー スレッドの外部でファイル システムにアクセスしないように十分に注意してください。

すぐに (ワーカーがチャンスを得る前に) 返されるサムネイルはTHUMBNAIL_DUMMY_SOURCE、適切なプレースホルダーに設定することで制御できます。

サムネイルが最初に要求されたときにジョブが作成され、ワー​​カー スレッドが完了するまで、後続の要求にはダミー イメージが提供されます。

于 2013-05-25T17:08:47.157 に答える