相关疑难解决方法(0)

重复的os.path.isdir调用中出现大量内存泄漏?

我一直在编写与扫描目录有关的内容,并在调用os.path.isdir时注意到严重的内存泄漏,所以我尝试了以下代码片段:

def func():
    if not os.path.isdir('D:\Downloads'):
        return False
while True:
    func()
Run Code Online (Sandbox Code Playgroud)

在几秒钟内,Python进程达到100MB RAM.

我想弄清楚发生了什么.只有当路径确实是一个有效的目录路径(意味着没有执行'return False')时,似乎巨大的内存泄漏才有效.此外,有趣的是看到相关调用中发生了什么,比如os.path.isfile.

思考?

编辑: 我想我正在做点什么.虽然isfile和isdir是在genericpath模块中实现的,但在Windows系统上 - isdir是从内置模块导入的.所以我不得不下载2.7.3源码(我很久以前就应该这样做了......).

经过一些搜索,我在\ Modules\posixmodule.c中找到了posix__isdir函数,我假设它是从nt导入的'isdir'函数.

这部分功能(和评论)引起了我的注意:

if (PyArg_ParseTuple(args, "U|:_isdir", &po)) {
        Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po);

        attributes = GetFileAttributesW(wpath);
        if (attributes == INVALID_FILE_ATTRIBUTES)
            Py_RETURN_FALSE;
        goto check;
    }
    /* Drop the argument parsing error as narrow strings
       are also valid. */
    PyErr_Clear();
Run Code Online (Sandbox Code Playgroud)

似乎这一切都归结为Unicode/ASCII处理错误.

我刚刚尝试使用unicode中的路径参数上面的代码片段(即u'D:\ Downloads') - 没有任何内存泄漏.哈哈.

python memory-leaks system-calls python-2.7

21
推荐指数
1
解决办法
1121
查看次数

标签 统计

memory-leaks ×1

python ×1

python-2.7 ×1

system-calls ×1