2012-03-04 4 views
1

Djangoにたくさんのファイルをアップロードする際に問題があります。文脈は以下の通りです:私は1つ以上の列が画像ファイル名であるスプレッドシートを持っています。これらのイメージは、入力タイプ=ファイルとオプション倍数のフォームを使用してアップロードされています。Djangoにたくさんのファイルをアップロードする際のトラブル

少数の行、つまり70個ですべてがうまくいっています。しかし、より多くの行があり、結果的にイメージが増えると、ランダムな位置にIOErrorが発生します。

Djangoでファイル/画像のアップロードに関するいくつかの質問を確認しましたが、私の問題に関連するものは見つかりませんでした。

私が使用しているモデルは、LFS(www.getlfs.com)の製品モデルです。私たちは、LFSに基づいたシステムを開発しており、数十の製品の作成をバッチで容易にするために、スプレッドシートを通じて主な製品プロパティを受け取るためのビューとテンプレートを作成しました。各行は製品であり、列は望ましいプロパティです。

LFSはカスタムクラスImageWithThumbsField(ImageField)を使用して製品のイメージを保存し、製品インスタンス(スプレッドシートから取得)を保存するとすべてのサムネイルが生成されます。これは時間(cpu)を消費する作業であり、何らかの理由ですべての処理が行われる前に一時ファイルが削除されるという私の最初の推測です。

アップロードしたファイルをもっと長く保存する方法はありますか?何百ものアップロードされたファイルを処理できるように提案されている他の方法はありますか?何が起こっているのかについてのヒント?

あなたは私の質問を理解できますか?必要に応じてコードを投稿することができます。 LFSコードの関連部分に

リンク:サムネイルが生成され

https://github.com/diefenbach/django-lfs/blob/master/lfs/core/fields/thumbs.py

  • 製品モデル

https://github.com/diefenbach/django-lfs/blob/master/lfs/catalog/models.py

ありがとうございます!

+0

エラーが発生した場合は、トレースバックを投稿してください。アプリケーションをどのように実行していますか? Webサーバーやdjangoのdevserver経由でもエラーがスローされますか? – ilvar

+0

次の4日間で、トレースバックの一部はhttp://dpaste.com/711195/ – momenezes

答えて

1

メモリが不足しているようです。ジャンゴprocessessアップロードは、フォームまで有効とされている場合、すべてのファイルのいずれかです:

  • のpython/WSGIプロセス/作業員の内部メモリに保持します。(runserverの通常モード)

    この場合、プロセスメモリをいっぱいにして領域を使い果たしてしまうほどの写真をアップロードしています。想像できるようにIOErrorがどこで発生するかは、決定的ではありません(GC Dependent)。

  • 一時的にこの場合は/ tmp/(apacheの通常のセットアップ)

    に保存され、ウェブサーバのramfsは、まだディスクに書き込まれていない画像がいっぱいです。この場合、同じ場所にIOErrorが発生するはずです。

どちらの場合でも、この方法で画像を一括アップロードするべきではありません。 Apache/Djangoはそのために設計されていません。リクエスト/レスポンスごとに1つの製品/画像をアップロードしてみると、問題はすべて消えてしまいます。

+0

+0.5とかなり太字で表示されます。 +0.5私は酔っている。教育的な答えのように見えますが、私は1点しか提示できません。 – dokkaebi

+0

@トーマス:あなたの答えは非常に近いか、本当は真実であるようです。 PILがファイルを読み込もうとすると、0KBのファイルになっています。これは、おそらくあなたが書き込んだ原因の一部に起因します。 一時ストレージをディスクに変更すると効果があると思いますか? あなたの答えをありがとう。 – momenezes

+0

@momenezes 1リクエストですべての画像をアップロードすることは本当に必要ですか?私はdjangoでディスクベースのアップロードを行う方法はわかりません。 – Thomas

関連する問題