Я использую django
API (drf
) через gunicorn
, как приложение wsgi
.
API обрабатывает конфиденциальную информацию (пароли и другие секреты), которая должна бытьочищено из системной памяти (ram
).Насколько я понимаю, все данные, поступающие в запросе API, будут собираться с использованием обычного механизма подсчета ссылок: после того, как запрос был обработан и Gunicorn получил ответ, больше нет ссылок на запрос, и, таким образом, он будет полностью мусоромсобрано.
То же самое будет применяться к любому объекту, созданному во время обработки запроса: все ссылки на него будут удалены после обработки запроса.
Единственный способ нарушить это предположениеесли я выполню одно из следующих действий:
- сохранить ссылки на запрос в глобальном объекте
- создать циклические ссылки на объект запроса
Вв случае 2
модуль gc
сможет обнаружить ссылки и удалить их.Я даже могу вызвать это вручную с помощью gc.collect()
Первой проблемы можно избежать, просто следя за тем, чтобы не хранить ссылки в глобальных объектах.
У меня есть два вопроса:
- Есть ли еще какие-то вещи, о которых я должен быть осторожен относительно сохранения данных в памяти?
- Как заставить принудительно запускать сборку мусора (
gc.collect()
) в конце обработки запроса в gunicorn
?