Переменная содержит большой объем данных, сервис падает с ошибкой OOM
Ошибка systemctl
A process of this unit has been killed by the OOM killer.
Ошибка понятна, так же известно почему это происходит, вот в этом месте
@api_view(["GET"])
def dynRequest2(request):
uri = request.build_absolute_uri().split("/apiv1/")[1]
key, access_token = check_request(request=request) # самонаписанная функция, возвращает необходимые ключ и токен доступа
if key:
header = {
'Authorization':'Bearer ' + access_token,
'Content-Type':'application/json; charset=utf-8'
}
response = get(URL+uri, headers=header)
return Response(response.json())
return Response({"result":"something went wrong"})
То есть я запрашиваю данные и в том же виде передаю дальше. Переменная response
может содержать большое количество данных и я понимаю, что данные остаются в памяти.
Как избежать этого?
UPD
Попробовал использовать StreamingHttpResponse
@api_view(["GET"])
def dynRequest2(request):
uri = request.build_absolute_uri().split("/apiv1/")[1]
key, access_token = check_request(request=request)
if key:
header = {
'Authorization': 'Bearer ' + access_token,
'Content-Type': 'application/json; charset=utf-8'
}
try:
with get(URL + uri, headers=header, stream=True) as response:
response.raise_for_status()
return StreamingHttpResponse(
response.iter_content(chunk_size=8192),
content_type=response.headers.get('Content-Type', 'application/json')
)
except Exception as e:
return Response({"result": "error", "details": str(e)}, status=500)
return Response({"result": "something went wrong"}, status=400)
ответ
{"result": "error", "details": "Мы достигли конца буфера."}
Ошибку перевел на русский, поскольку используется норвежский язык
в оригинальном виде ошибка выглядит так
Vi nådde slutten på bufferen.