Python на Ma c Терминал - Убито: 9 - PullRequest
0 голосов
/ 20 июня 2020

Я написал следующую программу на Python (работа с текстовым файлом из 1000 слов и поиск всех перестановок из 4 слов) и запустил ее на терминале Ma c:

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 из-за размера всех перестановок? Или что-то связано с терминальной средой Ma c?

Как я могу обойти эту ошибку? Спасибо!

1 Ответ

1 голос
/ 20 июня 2020

Давайте посмотрим ... вы создали один объект Python примерно из 1000 ^ 4 перестановок по 4 слова в каждом. Средняя длина слова в использовании составляет около 4,5 букв, но средняя длина словаря больше - я полагаю, что это более 25 символов на перестановку. Это дает вам 2,5 * 10 ^ 13 байтов в вашем объекте.

Как вы выделяете RAM с одной строкой в ​​250 терабайт? Если вы превысите пределы памяти, в чем будет сообщение об ошибке?

Да, это проблема с вашей средой Ma c: SegFault - это не сообщение об ошибке. Похоже, что ваша система разбилась так сильно, что она так и не вернулась из-за ошибки памяти Python.

Кстати, ремонт «очевиден» - прекратите попытки записать 250 ТБ за один звоните ! Я надеюсь, что в дифференциации вывода нет ничего, что требовало бы блочной записи. Вместо этого пишите их по одному.

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