Для CPython для этого нет хорошего ответа, который не требует написания расширения Python C, поскольку mlock
работает на страницах, а не на объектах. Даже если вы использовали ctypes
для извлечения необходимых адресов и mlock
-или их все через ctypes
mlock
звонки, у вас будет чертовски определенное время, когда mlock
и когда до munlock
. Вам нужно знать адрес и размеры памяти всех защищенных типов данных; так как mlock
работает на страницах, вам нужно будет тщательно отслеживать, сколько объектов в настоящее время находится на любой заданной странице (потому что если вы только mlock
и munlock
слепо, и есть несколько вещей, которые нужно заблокировать на странице, первый munlock
разблокирует все из них: mlock/munlock
- это булевский флаг, он не учитывает количество блокировок и разблокировок).
Даже если вы справитесь с этим, у вас все еще будет гонка между сбором данных и mlock
, во время которого данные могут быть записаны для обмена.
Вы могли бы частично избежать этих проблем путем тщательного использования из mmap
модуля и memoryview
s (mmap
дает страницы памяти, memoryview
ссылки указанной памяти без копирования, поэтому ctypes
может быть использован для mlock
страницы), но вы d придется строить все с нуля.
Короче говоря, Python не заботится о замене или защите памяти так, как вы хотите; он доверяет файлу подкачки, который должен быть настроен на нужную безопасность (например, отключен или зашифрован), не предоставляя дополнительной защиты и не предоставляя информацию, необходимую для ее добавления.
Я нашел это [IBM] (http: // www.ibm.com/developerworks/library/s-data.html?ns-311) актуальный/интересный документ относительно блокировки памяти и изменчивости в Python – metasyn
Очень интересно читать. Хорошо объясняется отключение дампов ядра. – ArekBulski