栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python:垃圾回收失败?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python:垃圾回收失败?

发现这也可以由Alex Martelli在另一个话题中回答。

不幸的是(取决于您的Python版本和版本),某些类型的对象使用“空闲列表”,这是一种整洁的局部优化,但可能会导致内存碎片,特别是通过为特定类型的对象分配更多的“专用”内存来实现。因此无法使用“普通基金”。

确保大量但临时使用内存的唯一确实可靠的方法是在完成后将所有资源都返还给系统,这是让使用发生在子进程中,该进程需要大量内存,然后终止。在这种情况下,操作系统将完成其工作,并乐意回收子进程可能吞没的所有资源。幸运的是,在现代版本的Python中,多处理模块使这种操作(以前是很痛苦的)变得不太糟糕。

在您的用例中,似乎子过程累积一些结果并确保这些结果可用于主过程的最佳方法是使用半临时文件(我指的是半临时文件,而不是那种关闭后会自动消失,只会删除您用完后会明确删除的普通文件)。

幸运的是,我能够将占用大量内存的工作分成多个单独的块,这使解释器在每次迭代后实际上都能释放临时内存。我使用以下包装器将内存密集型功能作为子进程运行:

import multiprocessingdef run_as_process(func, *args):    p = multiprocessing.Process(target=func, args=args)    try:        p.start()        p.join()    finally:        p.terminate()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639676.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号