Python 被杀死(可能是内存泄漏)

标签 python

我已经为此工作了几个星期,我已经阅读了很多关于 python 内存泄漏的问题,但我就是想不通。

我有一个包含大约 700 万行的文件。对于每一行,我需要创建一个字典。所以这是一个看起来像这样的字典列表:

[{'a': 2, 'b':1}{'a':1, 'b':2, 'c':1}]

我正在做的是...

list = []
for line in file.readlines():
    terms = line.split(" ")
    dict = {}
    for term in terms:
        if term in dict:
            dict[term] = dict[term] + 1
        else:
            dict[term] = 1
    list.append(dict.copy())
    dict.clear()
file.close()

问题是,当我运行它时,它总是在第 6000000 行附近被杀死。最初我只是在做 dict = {} 但改变了它所以我在阅读类似的帖子后做了 dict.clear() ,但它没有改善任何东西。我知道一些帖子提到了循环引用,我查看了我的代码,但我认为我没有那个问题。

我怀疑在一个列表中存储 700 万个词典不能用 Python 处理?我将不胜感激有关如何在不被杀死的情况下运行整个过程的任何建议。

(版本是2.7.4)

最佳答案

尝试:

from collections import Counter
with open('input') as fin:
    term_counts = [Counter(line.split()) for line in fin]

我相信这就是您要通过代码实现的目标。

这避免了 .readlines() 首先将文件加载到内存中,利用 Counter 进行计数并一次性构建列表,而无需绕过消隐/分配/清除字典/附加到列表...

关于Python 被杀死(可能是内存泄漏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17766142/

相关文章:

python - 类型错误 : ufunc 'sqrt' not supported for the input types when plotting a colormap in basemap

python - 计算字典中最接近输入的颜色

python - 如何创建与其自身具有 ManyToMany 关系的 Elixir 类

python - 如何制作散点图动画

c++ - 模拟器,发送请求-响应并打开 TCP 连接

python - 在 python 中编写提醒/秒表程序的最佳方法?

Python 获取 http 预告片

将 Django 项目部署到 Heroku 时,python manage.py collectstatic --noinput 错误

python - 如何在 python 中获取 firebase 当前用户标识 (uid)?

python - 删除文件的任意 block