ラズベリーパイ(1/2 GB RAM、1 CPU)で実行される単純なファイルサーバーを作成しました。nginx(1ワーカー)の背後にあるgunicorn(3ワーカー)の下で実行されています。
あまりにも多くのファイルを同時にダウンロードしようとすると(たとえば5)、すべてが途中で終了してから中止されるという奇妙な問題があります。djangoサーバーからの出力はありません(開発サーバーを使用してもこの問題が発生するため、gunicornとnginxの背後で実行されていますが、それでも喜びはありません)。
私のダウンロードビューは次のとおりです。
@never_cache
def download_media(request, user_id, session_key, id, filepath):
"Download an individual media file"
context = RequestContext(request)
# validate the user_id & session_key pair
if not __validate_session_key(user_id, session_key):
return HttpResponseRedirect(reverse('handle_logout'))
filepath = unicode(urllib.unquote(filepath))
if '..' in filepath:
raise SuspiciousOperation('Invalid characters in subdir parameter.')
location = MediaCollectionLocation.objects.get(id=id)
path = os.path.join(location.path, filepath)
response = HttpResponse(FileWrapper(file(path)), content_type='application/octet-stream')
response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(path)
response['Content-Length'] = os.path.getsize(path)
response["Cache-Control"] = "no-cache, no-store, must-revalidate"
return response
クライアントに認証を要求するため、この方法でファイルを提供しています(したがって、nginxを使用して静的コンテンツをリダイレクトして提供するだけでは不十分です)。
複数のリクエストを並行して行うと、なぜドロップアウトするのか考えている人はいますか?