У меня есть приложение фляги (версия фляги 1.0.2), которое обрабатывает документы XML.Документы размещены в формате json, скажем так:
import requests
import sys
import json
with open('big.xml', encoding="utf-8") as f:
xml_string = f.read()
print(sys.getsizeof(xml_string) // 1024 // 1024)
# 283
gid = "FOO"
json_data = json.dumps({"file_content": xml_string, "self_id": gid})
print(sys.getsizeof(json_data) // 1024 // 1024)
# 305
result_json = requests.post("http://my_server:8080/api", data=json_data, headers={"Content-Type": "application/json"})
Как видите, xml-файлы могут быть довольно большими, в этом примере около 300 МБ.
Приложение для моих колб,для упрощения это выглядит так:
from flask import Flask, request, jsonify
from memory_profiler import profile
app = Flask(__name__)
@app.route('/api', methods=['POST'])
@profile
def api():
input_data = request.get_json()
output_data = {"id": "FOO"}
response = jsonify(output_data)
return response
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080, debug=True)
Во время публикации запроса использование памяти приложением колбы увеличивается до ~ 2,8 ГБ .Профилирование памяти в коде выше нигде не близко к этим числам:
Line # Mem usage Increment Line Contents
================================================
6 27.8 MiB 27.8 MiB @app.route('/api', methods=['POST'])
7 @profile
8 def api():
9 617.3 MiB 589.5 MiB input_data = request.get_json(request.data)
10 617.3 MiB 0.0 MiB output_data = {"id": "FOO"}
11 617.3 MiB 0.0 MiB response = jsonify(output_data)
12 617.3 MiB 0.0 MiB return response
Чего мне не хватает?Что вызывает этот большой всплеск памяти и как с ним бороться?