【问题标题】:Python on Mac Terminal - Killed: 9Mac 终端上的 Python - 被杀:9
【发布时间】:2020-10-10 21:53:14
【问题描述】:

我用 Python 编写了以下程序(使用 1000 个单词的文本文件并找到 4 个单词的所有排列)并在 Mac 终端上运行它:

from itertools import permutations

with open('wordlist.txt') as f:
    content = f.readlines()
content = [x.rstrip() for x in content] 

g = open("finalwordlist.txt", "a")

g.write('%s' % "\n".join(map("".join, permutations(content,4))))

过了一会儿,我从终端得到了以下输出:

Killed: 9

没有输出写入输出文本文件,所以我假设程序在 write() 步骤之前终止。

当我发现大小小于 4 的排列(例如 1、2、3)时,这个程序起作用了。被杀者:9 是因为所有排列的大小吗?还是和Mac终端环境有关?

我该如何解决这个错误?谢谢!

【问题讨论】:

标签: python macos terminal itertools


【解决方案1】:

让我们看看......您已经生成了一个 Python 对象,其中大约有 1000^4 个排列,每个排列有 4 个单词。 usage 中的平均单词长度约为 4.5 个字母,但词典的平均长度更长——我会尝试一下,每个排列超过 25 个字符。这会在您的对象中为您提供 2.5 * 10^13 字节。

您的 RAM 分配如何处理单个 250 TB 的字符串? 如果超出内存限制,错误信息是什么?

是的,这是 Mac 环境的问题:SegFault 不是错误消息。 看来您的系统崩溃得太厉害了,以至于它再也没有回过头来发出 Python 内存错误。

顺便说一句,修复是“显而易见的”——不要尝试在一次调用中写入 250 Tb! 我希望,输出微分中没有任何东西需要块写入。相反,一次写一个。

for combo in permutations(content,4):
    g.write("".join(combo) + "\n")

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 2017-04-01
    • 2018-01-08
    • 2017-03-26
    • 1970-01-01
    • 2016-04-25
    • 2019-05-24
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多