看看
mmapmodule.c source
,当对象引用计数为零并被删除时,文件将被取消映射和关闭。以下函数位于对象的
tp_dealloc
. 这和
close
方法也在源代码中,这意味着您所要做的就是退出引用映射或
del
他们。
所有这些都有一个警告。如果有python垃圾收集器无法解析的循环引用,则引用计数将永远不会变为零,资源也不会被清除。当心那些背信!
第二个警告-我指的是cpython。谁知道其他实现的核心隐藏着什么。
static void
mmap_object_dealloc(mmap_object *m_obj)
{
if (m_obj->data != NULL)
UnmapViewOfFile (m_obj->data);
if (m_obj->map_handle != NULL)
CloseHandle (m_obj->map_handle);
if (m_obj->file_handle != INVALID_HANDLE_VALUE)
CloseHandle (m_obj->file_handle);
if (m_obj->tagname)
PyMem_Free(m_obj->tagname);
if (m_obj->fd >= 0)
(void) close(m_obj->fd);
if (m_obj->data!=NULL) {
munmap(m_obj->data, m_obj->size);
}
if (m_obj->weakreflist != NULL)
PyObject_ClearWeakRefs((PyObject *) m_obj);
Py_TYPE(m_obj)->tp_free((PyObject*)m_obj);
}