6

そのため、Pylons でのファイルのアップロードに関してかなり厄介な問題が発生しており、誰かが私を支援してくれることを望んでいます。当初、これは Pylons の問題であると考えてここに問題を投稿しましたが、その後、問題はサーバー、つまり貼り付けによるものであると結論付け、問題が発生した場所を正確に追跡しましたが、不明ですそれを解決する方法。動作は次のとおりです。私は、paster を介して提供している Pylons Web アプリケーションを持っています。アプリケーションの 1 つは、ユーザーがシステムにファイルをアップロードできるようにするもので、ファイルのサイズがかなり大きくなる場合があります (> 50mb)。このようなアップロード中に、サーバーは散発的に接続をリセットします (つまり、Chrome では、「エラー 101 (net::ERR_CONNECTION_RESET): 接続がリセットされました。」というエラーが表示されます) 大きなファイルでは約 50% の確率で発生します。

このような場合、サーバーは POST をアプリケーション レベルに渡すことはありません。例外はスローされません (少なくとも、私が見つけることができる)。問題を cascade.py (特に、httpserver.py から呼び出される wsgi_application メソッド) に絞り込みました。後者から:

結果 = self.server.wsgi_application(self.wsgi_environ, self.wsgi_start_response)

cascade.pyのcall関数では、ファイルは一時ファイルに書き込まれているように見えます。関連するループは次の場所から始まります。

copy_len > 0 の間:

次に、開いているファイルにチャンクを 1 つずつ書き込みます。これらの書き込みが個別に例外をスローすることはありません。ただし、サーバーはこれらの書き込み中にランダムに見えるだけで「立ち去る」ことがよくあります (時間もこれと相関していないようです)。したがって、減少しているcopy_lenサイズを出力すると、それがある程度まで減少するのを見て、サーバーが突然「接続リセット」を送信します(または、少なくともクライアントはそうすると思います)およびメソッド終了したようです (ループが終了したかのように、copy_len が出力されなくなりますが、0 ではありませんでした)。

1)これは散発的にしか発生せず、2)実際のエラー/例外を追跡できないようです-それは一種の...死ぬので、私は完全に困惑しています。

問題があれば、ペースト 1.7.3、Python 2.7、および Fedora OS を実行しています。何が起こっているのか、どうすればこれを解決できるのか、誰かが洞察を持っていますか? 助けてくれてありがとう。

4

2 に答える 2

1

2つのアイデアが思い浮かびます...

  • nginxなどの別のより堅牢なWebサーバーでテストします。必要に応じて同時に実行できます。問題が解決するかどうかを確認します。貼り付けはWebアプリを処理できますが、私が知る限り、大量のファイル転送を処理することを意図したものではありません。
  • アップロード中にチャンク転送エンコーディングを使用していますか?
于 2011-09-06T21:46:08.743 に答える
0

Ubuntu 10.04でapache 2.2 + mod_python 3.3を使用しても問題ありません。大きなファイル (400MB) のアップロードに成功しました。

アップローダーを使用して、html アップロード フォームを作成しました。

于 2011-09-19T15:35:09.707 に答える