热门优化Django / Python中的RAM使用率?

时间:2014-12-07 14:26:38

标签: python django

我需要帮助来减少这个python脚本的RAM使用情况:

tempproducts = TempProducts.objects.filter()

for url in tempproducts:
    scrap_and_save_product(url.url,True,0)

scrap_and_save_product是一个使用BeautifulSoup废弃数据并将其保存在数据库中的函数。 TempProducts有大约100,000种产品

每30分钟RAM使用量增加约50 MB

RAM使用日志:

220.059  MB 
271.594  MB 
313.316 MB
355.492 MB
373.516 MB
402.266 MB
437.328 MB
470.746 MB
507.195 MB
543.059 MB
574.215 MB
614.906 MB
643.902 MB
742.559 MB
787.93 MB
823.988 MB
856.949 MB
896.645 MB
931.93 MB
964.68 MB

如何确切地检查哪个数据结构占用了我的RAM?如何减少Python / Django中的RAM使用量? ...使用元组或列表更好吗?

4 个答案:

答案 0 :(得分:2)

  1. 您应该向我们展示scrap_and_save_product功能的代码。
  2. 尝试使用大数据进行更具内存效率的查询。详细描述here。希望这些有帮助!

答案 1 :(得分:2)

确保您的设置中有DEBUG = False。如果此设置为true,则保留SQL结果以进行调试。

答案 2 :(得分:1)

使用iterator()。但不要忘记它不会缓存结果。

  

对于只返回大量对象的QuerySet   需要访问一次,这可以带来更好的性能和a   显着减少记忆。

答案 3 :(得分:0)

使用tempproducts=TempProducts.objects.filter().values('url')

根据您在代码中显示的内容,您只需要数据库中的url。相反,您将获取存储在表中的所有内容,最终保存在RAM中。

查询:tempproducts=TempProducts.objects.filter()转换为:

SELECT * from tempproducts_table;

temproducts = TemProducts.objects.filter().values('url',)转换为:

SELECT url from tempproducts_table;