Python脚本会随着时间的过去而变慢

时间:2019-05-19 21:50:51

标签: python performance

我有一个python 3脚本,它基本上是API的数据抓取工具。

代码本身运行良好,速度惊人,但是随着时间的推移它会变慢。

我不知道如何找到它变慢的原因。

它是如何工作的简单概述:

  1. 脚本调用API数据集,该数据集以JSON形式返回并转换为包含字典的完整列表。
  2. 字典列表被循环显示,并根据多个条件进行检查。
  3. 如果找到匹配项,则将打开一个CSV文件,并将结果写入其中。
  4. 在根据特定标准测试了所有数据之后(使用简单的If语句),然后将所有数据记录在CSV文件中。

  5. 每次弹出一个新的CSV文件包含100个以上的数据点后,最后一个弹出。

  6. 重复。

现在一切正常,直到脚本运行了大约24个小时。这样一来,每个循环的循环速度将约为32秒,并且随着时间的流逝,它将缓慢增加。

我的问题是-是什么原因造成的?我在哪里看可能导致这种情况的原因

如果我遗漏了一些极为重要的信息,请让我知道我需要提供哪些附加信息。

1 个答案:

答案 0 :(得分:0)

通常情况下,如果有一些事情导致加班时间减慢,那么默认情况下,我会至少测试两个项目。

  1. 检查垃圾回收是否有帮助。如果对象不断保存,即same_name = new_object,那么原始same_name的内存将不会释放。除了减少可用内存之外,这还可能导致性能下降。简单运行import gc然后偶尔运行gc.collect()可能会有所帮助。

  2. 对象的大小继续增长。如果是这种情况,并且我不知道是否是因为我没有看过您的代码,那么使用pickle可以帮助存储对象块。达到指定的大小后,然后存储对象并重新开始。

要继续缩小范围,也许您可​​以在代码中添加计时器(尤其是在您最不希望出现问题的地方),然后将计时数据打印或写入日志文件。我只使用from time import time,然后使用start_time = time(),然后使用end_time = time()来获得操作通过end_time - start_time所花费的总秒数。此信息可以帮助您查看代码开始花费更长的时间。将这些数据存储在表中将有助于更容易地使用一些名称来使用,分析和标记时间数据,并帮助您准确地知道代码中信息的收集位置。

如果您恰好采取了此步骤,请将新信息添加到您的问题中,以帮助我们更好地为您提供帮助。