Глядя на источник mmapmodule.c , файл не сопоставляется и закрывается, когда счетчик ссылок на объект обнуляется и удаляется.Следующая функция находится в объекте tp_dealloc
.Это похоже на метод close
в исходном коде, и это означает, что все, что вам нужно сделать, это выйти из области видимости любой переменной, ссылающейся на карту, или del
их.
Существует предупреждениевсе это.Если у вас есть циклические ссылки, которые сборщик мусора Python не может разрешить, счетчик ссылок никогда не обнулится, и ресурсы не будут очищены.Имейте в виду эти обратные ссылки!
Второе предостережение - я имею в виду CPython.Кто знает, что скрывается в основе других реализаций.
static void
mmap_object_dealloc(mmap_object *m_obj)
{
#ifdef MS_WINDOWS
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);
#endif /* MS_WINDOWS */
#ifdef UNIX
if (m_obj->fd >= 0)
(void) close(m_obj->fd);
if (m_obj->data!=NULL) {
munmap(m_obj->data, m_obj->size);
}
#endif /* UNIX */
if (m_obj->weakreflist != NULL)
PyObject_ClearWeakRefs((PyObject *) m_obj);
Py_TYPE(m_obj)->tp_free((PyObject*)m_obj);
}