0

私は NotreDAM と呼ばれるオープンソースのドキュメント資産管理アプリケーションを維持しています。これはTwistedWebのインスタンスであるApache上で動作する Django で書かれています。

いずれかのユーザーがファイルをダウンロードするたびに、アプリケーションはすべてのユーザーに対して、ダウンロード中ずっとハングします。コードのこの時点までのダウンロード コマンドを追跡しましたが、Python/Django に精通していないため、これが発生する理由を知ることができません。

response = HttpResponse(open(fullpath, 'rb').read(), mimetype=mimetype)
response["Last-Modified"] = http_date(statobj.st_mtime)
response["Content-Length"] = statobj.st_size
if encoding:
    response["Content-Encoding"] = encoding
return response

ファイルのダウンロード中にハングするアプリケーションを修正する方法を知っていますか?

4

2 に答える 2

0

Web サーバーは、ファイルをストリーミングする代わりに、メモリ内のファイル全体を読み取ります。これはよく書かれたコードではありませんが、それ自体はバグではありません。

これにより、ファイル全体が読み取られている間、Apache クライアント (事前にフォークされた) がブロックされます。IO が遅く、ファイルが大きい場合、時間がかかる場合があります。

通常、この種の要求を満たすように構成された、事前にフォークされた Apache クライアントがいくつかありますが、構成が不適切な Web サーバーでは、この種の問題が発生する可能性があり、これは Django の問題ではありません。Web サーバーは、おそらくデバッグ モードで、事前にフォークされたプロセスを 1 つだけ実行しています。

于 2012-01-17T20:53:11.817 に答える
0

notreDAM は django.views.static.serve() コマンドを使用してアセット ファイルを提供します。これは、Django のドキュメントによると、「この方法を使用することは非効率的で安全ではありません。本番環境では使用しないでください。これは開発目的でのみ使用してください。」それでは、行きましょう。別のコマンドを使用する必要があります。

于 2012-01-18T21:55:26.457 に答える