当我尝试在aws ubuntu示例中运行下面的pickle程序时,我收到了“killed”消息,并且它没有生成pickle。然而,当我在本地机器(Mac)中尝试运行它时,情况也是如此。我使用python3来运行程序:
import nltk
import random
from nltk.classify.scikitlearn import SklearnClassifier
import pickle
from nltk.tokenize import word_tokenize
documents_f = open("documents.pickle", "rb")
documents = pickle.load(documents_f)
documents_f.close()
word_features5k_f = open("word_features5k.pickle", "rb")
word_features = pickle.load(word_features5k_f)
word_features5k_f.close()
def find_features(document):
words = word_tokenize(document)
features = {}
for w in word_features:
features[w] = (w in words)
#print (features)
return features
featuresets = [(find_features(rev), category) for (rev, category) in documents]
save_featuresets = open("featuresets.pickle","wb")
pickle.dump(featuresets, save_featuresets)
save_featuresets.close()
我相信这可能是由于内存问题,因为我正在使用aws免费轮胎。有人请让我知道如何解决这个问题?
发布日期:
$ python3 my_pickle.py
Killed
2条答案
按热度按时间bakd9h0s1#
您的EC2示例内存不足,并且您的进程正在被the OOM killer终止。
升级到更大的示例类型,或者找到一种方法使进程使用更少的内存。(例如,您可能希望考虑一次处理一个文档,而不是一次加载所有文档。)
nzk0hqpo2#
您可以使用以下命令检查在ec2示例上遇到的错误:
很可能是“内存不足”错误。要解决此问题,而不是升级ec2示例计算资源,您可以尝试以下修复。
可以通过在示例上分配交换空间来启用分页。使用以下命令启用交换:
上面的命令将分配1GB的交换空间,如果你想要更多的空间,我建议分配4096(4GB)。
需要注意的一点是,swap在每次重新启动后默认是不启用的,这意味着如果你重新启动ec2示例,你之前分配的交换空间将会消失。
为了解决这个问题,我们在每次示例重新启动后默认启用交换。
检查文件中是否存在以下行:
如果没有,添加它。保存对文件的write修改并重新运行你的python代码。在中间插入print语句以检查你的代码在执行过程中是如何进行的。