如何释放multiprocessing.sharedctypes.RawValue和multiprocessing.sharedctypes.RawArray?

How to free up multiprocessing.sharedctypes.RawValue and multiprocessing.sharedctypes.RawArray?

在 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()).

冻结未完成的对象

只要“最终清理”没问题,并且您不干扰循环垃圾收集器,清理最终就会发生(底层类型 uses a finalizer to ensure the memory is freed back to the shared heap it came from)。