理解使用Requests HTTP库时Python内存消耗增加

7 投票
2 回答
3565 浏览
提问于 2025-04-18 00:08

我正在使用 Python 2.7 和 Requests HTTP 库,操作系统是 Windows 7。

我不明白为什么下面的代码在执行时会消耗越来越多的内存?我通过任务管理器观察到了内存的使用情况。如果有人能指出可能的原因以及如何避免这个问题,那就太好了!另外,如果有人能在自己的系统上测试一下,确认这不是我或我的系统独有的问题,那就更好了。虽然内存消耗的增加幅度不大,但我觉得总有一天我的应用会崩溃,因为没有剩余的内存了。

代码:

import requests
def getName():
    url = 'https://stackoverflow.com/users/2382792/pss'
    r = requests.get(url)
    print r

while True:
    getName()

我下面详细解释了这个简单问题的原因。此外,我在使用 urllib2 模块 时也遇到了类似的问题。所以我想试试 Requests HTTP 库,但内存消耗的问题依然存在。

实际场景:我的实际应用是用 Python 和 wxPython 构建的。wxPython 的代码没有引起这个问题。连接到 URL 以从服务器获取一些值的 Python 代码才是问题所在。为了保持值的更新,每 2 秒就会获取一次这些值,然后在界面上显示。上面的代码是我原始代码的一个示例。此外,在上面的代码示例中,只有一个连接到 URL 的实例。在我的实际应用中,我有 9-10 个线程在连接不同的 URL 进行数据获取!这意味着在这种情况下,内存消耗比上面的示例代码增加得更快。 我希望现在能更清楚这个问题的严重性。另外,为了澄清,我并没有在抓取任何网站。

比较:为什么下面的代码没有像上面的代码那样的问题:

import random
def getValue():
    value = random.randrange(0,11)
    print value
while True:
    getValue()

更新:我测试了这段代码半个小时。最后我得出的结论是,内存消耗在开始时增加,后来进入一种状态,既有增加也有减少。最终内存消耗会保持在一个范围内。这里是我在 Windows 8 操作系统上用 processExplorer 创建的图表。中间的部分是内存使用情况(右键点击图片并选择查看以更清楚地看到):pexplorer

感谢你的时间!

2 个回答

0

我只能赞同你原帖中的一些评论。如果你想更深入了解垃圾回收(gc),我发现这个链接 http://www.digi.com/wiki/developer/index.php/Python_Garbage_Collection 非常有用。

0

我测试了这段代码半个小时。最后我得出的结论是,刚开始的时候内存使用量会增加,后来它会出现一种状态,既有增加也有减少。最终,内存使用量会保持在一个范围内。我相信这就是系统在经过一些有用的评论后应该工作的方式。 :)

撰写回答