首先,我用flush方法写了一个记录类:
class Recorder
def __init__(self, buffer_size, path):
self._big_buffer = np.array(*buffer_size)
self._path = path
def push(self, data):
# insert in self._big_buffer
# if self._big_buffer is full:
# self._flush()
def flush(self):
# write buffer to disk (self._path)
然后,我想在退出时刷新:当手动停止、崩溃或任何原因时。
所以我用:
def __init__(self):
(...)
atexit.register(self.flush)
而且效果很好。
但是现在,我想用不同的缓冲区大小和不同的路径多次录制、停止录制、再次录制。所以我必须丢弃,然后实例化几个Recorder
. 它有点工作,但是 oldRecorder
的内存(包含一些 fat self._big_buffer̀
)没有被释放,因为它被atexit
. 即使我明确调用del
. 我不能atexit.unregister(self._flush)
,因为它只是 Python 3。
我不希望重用现有实例,而是丢弃旧实例并创建新实例。
你会如何处理这样的情况?