如何释放multi-processing.sharedtypes.RawValue和multi-procession.s



在Python 3.8中,我有一些共享内存值,如下所示:

from multiprocessing.sharedctypes import RawArray, RawValue
...
sm_best_score_gpu_id = RawValue(ctypes.c_double, -1)
sm_positions = RawArray(ctypes.c_int32, genome_positions)

这需要每隔一段时间重新分配一次。如果我只是在循环中重复这些操作,那么当原始变量被垃圾收集时,这个内存会自动释放吗?

我浏览了ctypes文档,但没有发现任何与释放内存有关的内容。

我该如何释放这些内存?

应该没问题。垃圾收集可能不会立即发生。在PyPy、Jython等非CPython解释器上,所有集合都是不确定的。在CPython("引用"解释器,相当恰当地说,引用计数(上,当不涉及引用循环时,集合是确定的,但如果形成了引用循环(在奇怪的情况下可能会意外发生,比如在其回溯中包含帧的引发异常(,并且其中一个对象附加到循环中的某个对象,在收集循环本身之前,它不会被清理,这发生在未指定的未来时间(如果使用gc.disable()禁用循环收集器,或者使用gc.freeze()冻结未完成的对象,则可能根本不会发生(。

只要";最终清洁";很好,并且您没有干扰循环垃圾收集器,清理最终会发生(底层类型使用终结器来确保内存释放回它来自的共享堆(。

相关内容

  • 没有找到相关文章

最新更新