gpt4 book ai didi

python - 使用 Python 处理一个巨大的 CSV 时, 'killed' 是什么意思,突然停止?

转载 作者:IT老高 更新时间:2023-10-28 21:41:49 30 4
gpt4 key购买 nike

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

但是发生的情况是,一旦该计数部分完成并开始导出,它会在终端中显示 Killed

我不认为这是内存问题(如果是我假设我会遇到内存错误而不是 Killed)。

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

代码如下:

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 发生在 finished count 打印之后,完整的消息是:

killed (program exited with code: 137)

最佳答案

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

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

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

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

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

请注意,在 Python 3 中,items 返回一个“字典 View ”对象,该对象的开销与 Python 2 的版本不同。它取代了 iteritems,所以如果你以后升级 Python 版本,你最终会将循环改回原来的样子。

关于python - 使用 Python 处理一个巨大的 CSV 时, 'killed' 是什么意思,突然停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189522/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com