2024-04-25 19:53:55 发布
网友
根据Python Official Documentation,可以使用gc.collect()强制垃圾收集器释放未引用的内存。示例:
gc.collect()
import gc gc.collect()
del语句可能有用,但它不能保证释放内存。那个docs are here。。。还有一个why it isn't released is here。
del
我听说在Linux和Unix类型的系统中,有人为了做一些工作而分叉python进程,得到结果然后杀死它。
This article有关于Python垃圾收集器的注释,但我认为缺少内存控制是托管内存的缺点
不幸的是(取决于您的Python版本和发行版),某些类型的对象使用“空闲列表”,这是一种简洁的本地优化,但可能会导致内存碎片,特别是通过使越来越多的内存“专用于”某一类型的对象,从而无法用于“普通基金”。
唯一真正可靠的方法是,当系统完成使用时,确保对内存的大量但临时的使用确实会将所有资源返回给系统,这是在子进程中进行的,子进程会执行内存消耗工作,然后终止。在这种情况下,操作系统将完成它的工作,并乐意回收子进程可能已经占用的所有资源。幸运的是,在现代版本的Python中,multiprocessing模块使这种操作(以前相当痛苦)并不太糟糕。
multiprocessing
在您的用例中,子流程积累一些结果并确保这些结果对主流程可用的最佳方法似乎是使用半临时文件(我的意思是,半临时文件不是那种在关闭时自动消失的文件,只是普通的文件,当你处理完它们后,你可以显式地删除它们)。
根据Python Official Documentation,可以使用
gc.collect()
强制垃圾收集器释放未引用的内存。示例:del
语句可能有用,但它不能保证释放内存。那个docs are here。。。还有一个why it isn't released is here。我听说在Linux和Unix类型的系统中,有人为了做一些工作而分叉python进程,得到结果然后杀死它。
This article有关于Python垃圾收集器的注释,但我认为缺少内存控制是托管内存的缺点
不幸的是(取决于您的Python版本和发行版),某些类型的对象使用“空闲列表”,这是一种简洁的本地优化,但可能会导致内存碎片,特别是通过使越来越多的内存“专用于”某一类型的对象,从而无法用于“普通基金”。
唯一真正可靠的方法是,当系统完成使用时,确保对内存的大量但临时的使用确实会将所有资源返回给系统,这是在子进程中进行的,子进程会执行内存消耗工作,然后终止。在这种情况下,操作系统将完成它的工作,并乐意回收子进程可能已经占用的所有资源。幸运的是,在现代版本的Python中,
multiprocessing
模块使这种操作(以前相当痛苦)并不太糟糕。在您的用例中,子流程积累一些结果并确保这些结果对主流程可用的最佳方法似乎是使用半临时文件(我的意思是,半临时文件不是那种在关闭时自动消失的文件,只是普通的文件,当你处理完它们后,你可以显式地删除它们)。
相关问题 更多 >
编程相关推荐