Собирается ли мусор данных запроса в конце цикла запрос-ответ? - PullRequest
1 голос
/ 02 апреля 2019

Я использую django API (drf) через gunicorn, как приложение wsgi.

API обрабатывает конфиденциальную информацию (пароли и другие секреты), которая должна бытьочищено из системной памяти (ram).Насколько я понимаю, все данные, поступающие в запросе API, будут собираться с использованием обычного механизма подсчета ссылок: после того, как запрос был обработан и Gunicorn получил ответ, больше нет ссылок на запрос, и, таким образом, он будет полностью мусоромсобрано.

То же самое будет применяться к любому объекту, созданному во время обработки запроса: все ссылки на него будут удалены после обработки запроса.

Единственный способ нарушить это предположениеесли я выполню одно из следующих действий:

  1. сохранить ссылки на запрос в глобальном объекте
  2. создать циклические ссылки на объект запроса

Вв случае 2 модуль gc сможет обнаружить ссылки и удалить их.Я даже могу вызвать это вручную с помощью gc.collect()

Первой проблемы можно избежать, просто следя за тем, чтобы не хранить ссылки в глобальных объектах.

У меня есть два вопроса:

  1. Есть ли еще какие-то вещи, о которых я должен быть осторожен относительно сохранения данных в памяти?
  2. Как заставить принудительно запускать сборку мусора (gc.collect()) в конце обработки запроса в gunicorn?
...