对于CPython,没有很好的答案,这不涉及编写Python
C扩展,因为它
mlock适用于页面而不是对象。即使您曾经
ctypes检索过必要的地址并
mlock通过
ctypes
mlock调用对它们进行了遍历,也很难确定何时到达
mlock和何时到达
munlock。您需要知道所有受保护数据类型的内存地址和大小;因为
mlock网页上的作品,你必须仔细跟踪多少个对象在任何给定的网页目前(因为如果你只是
mlock和
munlock盲目,有一个以上的东西锁在一个页面中,首先
munlock将解开所有的人;
mlock/munlock是一个布尔型标志,它不计算锁定和解锁的数量)。
即使您能够做到这一点,在数据获取和
mlock将数据写入交换之间仍然存在竞争。
您可以通过仔细使用
mmap模块和
memoryviews来部分避免这些问题(
mmap为您提供内存页面,
memoryview无需复制即可引用该内存,因此
ctypes可以用于
mlock该页面),但是您必须从头开始构建所有内存。
简而言之,Python不在乎您想要的方式进行交换或内存保护。它信任将交换文件配置为所需的安全性(例如,禁用或加密),既不提供额外的保护,也不提供您需要添加该文件的信息。



