python – “杀死”是什么意思?

我有一个Python脚本,它导入一个大型CSV文件,然后计算文件中每个单词的出现次数,然后将计数导出到另一个CSV文件。

但是,发生的是,一旦计数部分完成,并且导出开始它说在终止杀。

我不认为这是一个内存问题(如果它是我认为我会得到一个内存错误,而不是杀死)。

可能是这个过程花了太长时间了吗?如果是这样,有没有办法延长超时期,这样我可以避免这种情况?

这里是代码:

csv.field_size_limit(sys.maxsize)
    counter={}
    with open("/home/alex/Documents/version2/cooccur_list.csv",'rb') as file_name:
        reader=csv.reader(file_name)
        for row in reader:
            if len(row)>1:
                pair=row[0]+' '+row[1]
                if pair in counter:
                    counter[pair]+=1
                else:
                    counter[pair]=1
    print 'finished counting'
    writer = csv.writer(open('/home/alex/Documents/version2/dict.csv', 'wb'))
    for key, value in counter.items():
        writer.writerow([key, value])

并且杀死发生在完成计数打印后,完整的消息是:

killed (program exited with code: 137)
退出代码137(128 9)表示您的程序由于接收到信号9而退出,这是SIGKILL。这也解释了被消息的消息。问题是,你为什么收到这个信号?

最可能的原因可能是您的进程超过了允许使用的系统资源量的一些限制。根据你的操作系统和配置,这可能意味着你有太多的打开文件,使用太多的文件空间或其他东西。最可能的是你的程序使用了太多的内存。当内存分配开始出现故障时,系统不会冒险破坏内存分配,而是会向使用过多内存的进程发送kill信号。

正如我先前所说,打印完成计数后可能达到内存限制的一个原因是,在最终循环中调用counter.items()会分配一个包含字典中所有键和值的列表。如果你的字典有很多数据,这可能是一个非常大的列表。一个可能的解决方案是使用counter.iteritems(),它是一个生成器。它不是返回列表中的所有项目,而是让它以更少的内存使用来迭代它们。

所以,我建议尝试这,作为你的最后循环:

for key, value in counter.iteritems():
    writer.writerow([key, value])

注意,在Python 3中,项目返回一个“字典视图”对象,它没有与Python 2的版本相同的开销。它替换iteritems,所以如果你以后升级Python版本,你会最终改变循环回到它的样子。

http://stackoverflow.com/questions/19189522/what-does-killed-mean

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – “杀死”是什么意思?