【问题标题】:Python program using feedparser slows over time [closed]使用 feedparser 的 Python 程序会随着时间的推移而变慢 [关闭]
【发布时间】:2016-02-23 13:15:14
【问题描述】:

我有一个循环运行的 Python 程序,它使用 feedparser 下载 20k RSS 提要,并将提要数据插入 RDBMS。

我观察到它从每分钟 20-30 次喂食开始,然后逐渐减慢。几个小时后,每小时喂食 4-5 次。如果我杀死程序并从它离开的地方重新启动,吞吐量再次是每分钟 20-30 次。

当然不是 MySQL 变慢了。

该计划可能存在哪些潜在问题?

【问题讨论】:

  • 不看代码几乎不可能回答。
  • @PadraicCunningham 我不同意。可以很好地回答。他很可能有与记忆有关的问题。该代码当然会有所帮助。
  • @Sid,我不同意,可以投很多飞镖,看看你的答案在做什么,但没有更多信息,任何人都会这样做。
  • @Sid 在开始猜测答案之前,您需要澄清一些事情。
  • 对于所有反对 Sid 答案的人 - 他的回答非常有帮助,我能够在此基础上解决问题。请理解有时人们会受到约束,他们可以共享代码。如果您认为自己无法回答 - 请至少不要让其他人失去动力。

标签: python performance feedparser


【解决方案1】:

问题很可能与记忆有关。您可能将提要保存在内存中,或者以某种方式积累了没有被垃圾收集的内存。诊断:

  1. 查看任务的大小(如果是 Windows,则为任务管理器,如果是 unix/Linux,则为顶部)并随着提要的增长对其进行监控。
  2. 然后您可以使用内存分析器来确定究竟是什么消耗了内存
  3. 一旦你发现你可以编写不同的代码

一些提示:

  1. 将任何相关的未使用数据结构设置为空后,执行显式垃圾回收调用 (gc.collect())
  2. 使用多处理方案,生成多个进程,每个进程处理较少数量的提要
  3. 如果您使用的是 32 位系统,可能会继续使用 64 位系统

关于内存分析器的一些建议:

  1. https://pypi.python.org/pypi/memory_profiler 这个挺好的,装修师傅也很热心
  2. https://stackoverflow.com/a/110826/559095

【讨论】:

  • 感谢 Sid - 这很有帮助。我确实看到任务管理器中的内存占用增加了。关于使用内存分析器的任何建议?您还提到了多处理方案 - 有什么建议吗?
  • 更新了一些建议的答案
猜你喜欢
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多