【发布时间】:2020-06-07 00:44:22
【问题描述】:
我正在使用 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 行(再一次,无论该行中实际包含的文本如何) ) 或第 2493 行,具体取决于我所做的更改。
无论我做什么,执行都会停止,然后根据任务管理器使用的内存运行到 100%。重要的是要注意,在执行卡住之前,内存不会大幅增加。
有人知道是什么原因造成的吗?我看不出代码有什么问题,而且它在执行一定数量的操作后停止执行这一事实表明我正在达到某种我不知道的基本限制。
【问题讨论】:
-
这(固定的迭代次数)让我想到了递归限制之类的东西,然后 PyCham 冻结试图处理巨大的堆栈跟踪信息??
-
在这种情况下,用户将在停止之前收到警报;甚至可以停止最大递归深度。在这种情况下,内存只会永远扩展,无需进一步执行代码
标签: python django memory pycharm