我正在研究一个Python脚本,该脚本查询几个不同的数据库以整理数据并将所述数据持久保存到另一个数据库。该脚本从大约15个不同数据库中的数百万条记录中收集数据。为了尝试加快脚本速度,我提供了一些缓存功能,归结为拥有可容纳一些经常查询的数据的字典。字典包含键值对,其中键是根据数据库名称,集合名称和查询条件生成的哈希,而值是从数据库检索的数据。例如:

[{123456789: {_id: '1', someField: 'someValue'}},其中123456789是哈希,{_id: '1', someField: 'someValue'}是从数据库检索到的数据。

将这些数据保存在本地字典中意味着,我不必每次都查询数据库(这可能很慢,而不必每次都查询数据库),而是可以在本地访问一些经常查询的数据。如前所述,查询很多,因此字典可能会变得非常大(几个GB)。我有一些代码使用psutil来查看运行脚本的计算机上有多少可用内存,如果可用内存低于某个阈值,则清除字典。清除字典的代码是:cached_documents.clear()

cached_documents = None

gc.collect()

cached_documents = {}

我应该指出,cached_documents是一个局部变量,该变量被传递到所有访问或添加到缓存的方法中。不幸的是,这似乎不足以适当地释放内存,因为即使调用了上面的代码后,Python仍然占用大量额外的内存。您可以在此处查看内存使用情况的配置文件:

[值得注意的事实是,清除字典的前几次,我们向系统释放了大量内存,但是随后的每次时间似乎都更少,这时内存使用量趋于平缓,因为缓存被非常频繁地清除。因为Python占用大量内存,所以可用内存在阈值之内。

在清除字典时是否有一种方法可以强制Python正确释放内存,从而避免使用扁平衬里?任何提示表示赞赏。

python 字典操作 内存占用,python - 如何强行释放字典使用的内存? - SO中文参考 - www.soinside.com...相关推荐

  1. python垂直输出hello_python - 我如何获得直方图以垂直输出数据? - SO中文参考 - www.soinside.com...

    例如,我有要输出的数据,例如进度1:* 进度模块预告片4:**** do_not_progress 6:****** 排除2:** 但是我希望它显示如下 进度 2: ** 等 非常感谢您提供帮助,非常 ...

  2. python如何读pst文件_python - 从win32或pypff读取PST文件 - SO中文参考 - www.soinside.com...

    这是我想为自己的应用程序做的事情.我能够从这些来源整理出一个解决方案: 上面的第三个链接应提供有关可用属性和各种项目类型的更多详细信息.我的解决方案仍然需要连接到Outlook应用程序,但是对用户来说 ...

  3. 计算机开机内存占用80%,Win10开机后内存占用高80%以上怎么办_win10电脑开机内存占用高达80%以上如何解决...

    近日有不少win10系统用户遇到这样一个现象,就是电脑开机之后,内存占用很费,达到了80%以上了,导致电脑非常卡,许多用户不知道遇到这样的该怎么办,为了解决这样的问题,接下来将给大家讲述一下win10 ...

  4. python 列表操作详解,Python列表解析操作实例总结

    本文实例讲述了Python列表解析操作.分享给大家供大家参考,具体如下: 列表解析 Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一 ...

  5. android内存占用分析,Android App性能评测分析-内存篇

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...

  6. mysql5.7内存占用_解决mysql升级到5.7内存占用过大问题

    背景 在只有512M内存的云主机中的mysql随着系统升级更新到5.7后,发现启动后啥都不干内存就占用到160M左右,大大超过之前的使用,这是怎么回事呢? 优化 经过查找资料,在mysql的配置文件中 ...

  7. android内存检测方法,Android_Android系统检测程序内存占用各种方法,1.检查系统总内存 复制代码 - phpStudy...

    Android系统检测程序内存占用各种方法 1.检查系统总内存 liuhx@uc ~ $ adb shell cat /proc/meminfo MemTotal:         840868 kB ...

  8. python数据库操作nosql_用Python写一个NoSQL数据库

    Set Up 下面是我们服务器所需的一些样板代码: """NoSQL database written in Python""" # Sta ...

  9. python分片操作_【python原理解析】python中分片的实现原理及使用技巧

    首先:说明什么是序列? 序列中的每一个元素都会被分配一个序号,即元素的位置,也称为索引:在python中的序列包含:字符串.列表和元组 然后是:什么是分片? 分片就是通过操作索引访问及获得序列的一个或 ...

最新文章

  1. Java RTTI与反射(参照Java编程思想与新浪博客)
  2. Java的clone()用法实例解析
  3. 1003. [ZJOI2006]物流运输【区间DP+最短路】
  4. android文件读写操作布局文件代码,android实现文件读写功能
  5. 气象数据领航无人飞行器线路优化大赛解决方案(3rd place)
  6. HTML5 API详解(14):Notification 实现桌面提醒
  7. 中兴V880使用手记之二——取得root权限
  8. android字符串点击事件,Android匹配字符串高亮并设置点击事件
  9. Spring中的WebAppRootListener
  10. 使用自制ADempiere 3.6.0 LTS安装软件进行安装(基于Ubuntu Desktop 12.04 LTS)
  11. java手机分辨率最高_smobiler自适应不同手机分辨率
  12. Beautiful Sequence
  13. 101.对称二叉树(力扣leetcode) 博主可答疑该问题
  14. boblog任意变量覆盖漏洞(二)
  15. Qt编写地图综合应用30-世界地图
  16. 基于照片的3D建模软件
  17. learning的反义词英文_常见英语词汇反义词大全
  18. altium 交叉线_关于各个设备,用直通线还是交叉线连接的详解
  19. android studio app字体大小设置,Android Studio App设置TextView文字内容大小颜色
  20. 单片机音乐盒c语言源程序,51单片机八音盒源程序(汇编语言)

热门文章

  1. mongoTemplate 条件查询
  2. Centos7上安装rabbitmq和使用
  3. [k8s] 第六章 Pod控制器详解(Controller-manager)
  4. 自从学了这套框架,自动化+性能都解决了
  5. 大佬教你怎样防止同事用 QQ 邮箱提交公司代码?
  6. 总分的公式计算机,装机模拟器各配件跑分及计算公式分享 3DMark分数怎么算 3DMark分数计算公式_游侠网...
  7. 高考计算机算分么,高考分数是怎么算出来的
  8. 使用mysql_MySQL 的安装与使用(一)
  9. Java查询spark中生成的文件_java+spark-sql查询excel
  10. 企业级 SpringBoot 教程 (三)SpringBoot用JdbcTemplates访问Mysql