Python停止运行,然后导致内存峰值

问题描述 投票:0回答:1

我正在使用PyCharm运行大型Python3.7脚本,并由Django连接,该脚本逐行解析txt文件并处理文本。它卡在了一个特别大的文件中的某个点上,我无法一生找出原因。一旦卡住,PyCharm根据任务管理器使用的内存将在5-10秒内达到100%的可用内存,而我必须手动停止执行(当它在其他文件上运行时以及之前,内存使用率很低)在大文件上停止执行。

我将问题缩小到以下循环:

i = 0
for line in line_list:
    label_tmp = self.get_label(line)  # note: self because this is all contained in a class
    if label_tmp in target_list:
        index_dict[i] = line
    i += 1
    print(i)  # this is only here for diagnostic purposes for this issue

这对于我测试过的少数文件非常有效,但是在问题文件上,它将在第2494次迭代时停止(即,当i = 2494时)。即使当我删除文件的第2494行或删除文件的前10行时,它也会执行此操作-因此,这排除了文件中任何特定行上的代码中的错误-无论什么,它都将停止运行在第2494行。

我构建了self.get_label()来生成日志文件,因为它是一个大函数。在玩了之后,我开始怀疑它无论经过什么动作都会停止运行。例如,我在self.get_label()的开头添加了以下虚拟行:

log.write('Check1\n')  
log.write('Check2\n')
log.write('Check3\n')
log.write('Check4\n')

在第2494次迭代中,日志文件中的最后一个条目是“ Check2”。如果我对该功能做了一些调整,它将在检查4处停止;如果我进行其他调整,它将在2493次迭代时停止,但在“ Check1”处停止,甚至一直到函数末尾。

我以为问题可能与日志文件中的内存有关,但是即使我注释掉了日志行,代码仍然停留在第2494行(再次,无论该行中实际包含的文本是什么)或2493rd行,具体取决于我所做的更改。

无论我做什么,执行都会停止,然后根据任务管理器使用的内存将达到100%。重要的是要注意,直到执行卡住之后,内存才真正增加。

有人有什么主意吗?我没有发现代码有什么问题,并且在执行了一定数量的操作后代码停止执行这一事实表明我正在达到某种我不知道的基本限制。

python django memory pycharm
1个回答
0
投票

您可以尝试使用sys.getsizeof。该命令必须发生某些事情,以至于疯狂地增加了内存。其他尝试使用的是常规终端/ cmd。否则,我想看更多的代码。

此外,您也可以枚举for循环,而不是使用i + = 1。

for i, line in enumerate(line_list):

希望有些帮助。

(对不起,没有足够的代表发表评论)

© www.soinside.com 2019 - 2024. All rights reserved.