【问题标题】:Hot to optimize RAM usage in Django/Python?在 Django/Python 中优化 RAM 使用很热门?
【发布时间】:2014-12-07 14:26:38
【问题描述】:

我需要帮助来减少此 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

内存使用日志:

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 使用量? ...更好地使用元组或列表?

【问题讨论】:

    标签: python django


    【解决方案1】:
    1. 您应该向我们展示scrap_and_save_product 函数的代码。
    2. 尝试对大数据进行更节省内存的查询。详细描述here。希望这些对您有所帮助!

    【讨论】:

    • 很遗憾,我不能给你看,因为它是私人代码
    • 我会试试你链接的提示
    【解决方案2】:

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

    【讨论】:

    • 我将 DEBUG 设置为 false ,现在我的 RAM 没有增加 """t 同样重要的是要记住,在打开 DEBUG 的情况下运行时,Django 会记住它执行的每个 SQL 查询。这在以下情况下很有用您正在调试,但在生产服务器上,它会迅速消耗内存。"""
    【解决方案3】:

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

    对于返回大量对象的查询集,您只 需要访问一次,这可以带来更好的性能和 显着减少内存。

    【讨论】:

      【解决方案4】:

      使用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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-03
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 2021-10-29
        相关资源
        最近更新 更多