在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)
这需要每隔一段时间重新分配。如果我只是在一个循环中重复这些操作,当原始变量被垃圾回收时,这个内存会自动释放吗?
我查看了ctype文档,但没有找到任何与释放内存相关的内容。
我如何释放这个内存?
发布于 2020-12-14 20:09:33
应该没问题。垃圾收集可能不会立即发生。在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)。
https://stackoverflow.com/questions/65278264
复制相似问题