【发布时间】:2015-08-19 14:13:23
【问题描述】:
首先,我用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。它有点工作,但旧的Recorder 的内存(包含一些胖self._big_buffer̀)没有被释放,因为它被atexit 保留。即使我明确调用del。
我不能atexit.unregister(self._flush),因为它只是 Python 3。
我不希望重复使用现有实例,而是丢弃旧实例并创建新实例。
遇到这种情况你会怎么处理?
【问题讨论】:
标签: python python-2.7 garbage-collection atexit